如何根据日期和类型进行分组

时间:2012-03-01 06:55:28

标签: 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    

我将不胜感激。

3 个答案:

答案 0 :(得分:2)

你有没有试过这样的东西

select OrderDate ,ltrim(rtrim(CCType)) as CCType  ,sum(Processed )
from [Order] group by  OrderDate ,ltrim(rtrim(CCType))

答案 1 :(得分:2)

试试这个:

select OrderDate, CCType, Sum(Processed)
from [Order]
group by OrderDate, CCType

答案 2 :(得分:2)

棘手的部分是获得这一行

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
相关问题