sql - 如何根据日期和类型分组

标签 sql sql-server-2008 tsql

我有下表,但我无法按日期和卡片类型对它进行分组,它也应该对值求和...我遇到问题是因为我认为的 id

   OrderID | OrderDate  | CCType      |  Processed
    ----------- ---------------------------
    451    |2012-02-27 | AMEX        |   10.56
    452    |2012-02-27 | VISA        |   20.00
    453    |2012-02-27 | MASTER CARD |   5.00
    454    |2012-02-27 | OTHER       |   16.00
    455    |2012-02-27 | AMEX        |   10.00
    456    |2012-02-26 | VISA        |   11.00
    457    |2012-02-26 | MASTER CARD |   12.00
    457    |2012-02-26 | OTHER       |   5.00

它需要结束这样的事情

OrderDate  | CCType      |  Processed
-----------------------------------------
2012-02-27 | AMEX       | 20.56
2012-02-27 | VISA       | 20.00
2012-02-27 | MASTER CARD| 5.00
2012-02-27 | OTHER      | 16.00    
2012-02-26 | AMEX       | 0.00
2012-02-26 | VISA       | 11.00
2012-02-26 | MASTER CARD| 12.00
2012-02-26 | OTHER      | 5.00    

如有任何帮助,我将不胜感激。

最佳答案

棘手的部分是得到这条线

2012-02-26 AMEX        0,00

如果你不需要它,其他答案有你想要的。

declare @Order table
(
  OrderID int,
  OrderDate date,
  CCType varchar(20),
  Processed money
)

insert into @Order values
(    451,    '2012-02-27', 'AMEX',           10.56),
(    452,    '2012-02-27', 'VISA',           20.00),
(    453,    '2012-02-27', 'MASTER CARD',    5.00),
(    454,    '2012-02-27', 'OTHER',          16.00),
(    455,    '2012-02-27', 'AMEX',           10.00),
(    456,    '2012-02-26', 'VISA',           11.00),
(    457,    '2012-02-26', 'MASTER CARD',    12.00),
(    457,    '2012-02-26', 'OTHER',          5.00)

select D.OrderDate, C.CCType, sum(coalesce(T.Processed,  0)) as Processed
from (values('AMEX'),
            ('VISA'),
            ('MASTER CARD'),
            ('OTHER')) as C(CCType)
  cross join (select distinct OrderDate
              from @Order) as D(OrderDate)
  left outer join @Order as T
    on D.OrderDate = T.OrderDate and
       C.CCType = T.CCType              
group by D.OrderDate, C.CCType
order by D.OrderDate desc, C.CCType

结果:

OrderDate  CCType      Processed
---------- ----------- ---------------------
2012-02-27 AMEX        20,56
2012-02-27 MASTER CARD 5,00
2012-02-27 OTHER       16,00
2012-02-27 VISA        20,00
2012-02-26 AMEX        0,00
2012-02-26 MASTER CARD 12,00
2012-02-26 OTHER       5,00
2012-02-26 VISA        11,00

关于sql - 如何根据日期和类型分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9511902/

相关文章:

sql - "SQL logic error or missing database"- 插入多行时出错

sql - 从多个表中选择计数

sql - SQL Server中如何更改列的默认值

sql - 简单的距离查询不起作用

sql-server-2008 - 用于标签的 GUID 与身份

sql - 使用 FOR JSON 时获取值数组而不是对象数组

sql-server - 在 SQL Server 中使用 SQL 查询获取不带扩展名的文件名

sql - 如何优先考虑一个索引而不是另一个索引?

sql-server - SQL Server 2008 Filestream Win32 错误,没有网线!

sql - 交换两个主键值并规避ORA-00001的更好方法:违反唯一约束?