Как я могу группировать на основе даты и типа - PullRequest
2 голосов
/ 01 марта 2012

У меня есть следующая таблица, но я не смог сгруппировать ее по дате и типу карты, также она должна суммировать значения ... У меня проблемы из-за идентификатора, который я считаю

   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 ]

2 голосов
/ 01 марта 2012

Попробуйте это:

select OrderDate, CCType, Sum(Processed)
from [Order]
group by OrderDate, CCType
2 голосов
/ 01 марта 2012

Самое сложное - получить эту строку

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
2 голосов
/ 01 марта 2012

Вы пробовали что-то подобное

select OrderDate ,ltrim(rtrim(CCType)) as CCType  ,sum(Processed )
from [Order] group by  OrderDate ,ltrim(rtrim(CCType))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...