Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何根据日期和类型进行分组_Sql_Sql Server 2008_Tsql - Fatal编程技术网

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

Sql 如何根据日期和类型进行分组,sql,sql-server-2008,tsql,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

我有下表,但我无法按日期和卡片类型对其进行分组,它还应将值相加…我认为由于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    

我将非常感谢您的帮助。

您试过类似的方法吗

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

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

最棘手的部分是得到这条线

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

嗯,它不起作用:(它仍然显示了美国运通的两行代码,应该加上它们)。。我觉得因为加工不同?(金额)-我会的,但我还是被卡住了。。我会给你答案。。。没问题。基本上,对于2012年2月27日的日期,它仍然显示了美国运通的两行,而它应该只显示一行的金额added@user710502-我认为需要应用修剪功能…如果在…之后或之前有任何空间,这将解决问题…因为这应根据您的数据进行操作。。