按日期分组和SUM int - 日期格式和顺序

时间:2015-06-14 13:21:11

标签: sql-server date casting group-by

我正在努力获得一天销售数量的总和。我需要结果在ORDER BY日期。下面的查询给出了我需要的确切结果,但日期没有按照我的需要进行格式化。

SELECT  CAST(Datetime AS DATE) AS 'date', SUM(quantity) as total_quantity
FROM Invoice_Itemized ii
INNER JOIN Invoice_Totals it ON it.Invoice_Number = ii.Invoice_Number
WHERE ii.ItemNum = '4011'
AND it.datetime > '05/15/2015'
GROUP BY CAST(Datetime AS DATE)

SELECT DATENAME(MM, datetime) + ' ' + CAST(DAY(datetime) AS VARCHAR(2)) AS [DD Month], SUM(quantity) as total_quantity
FROM Invoice_Itemized ii
INNER JOIN Invoice_Totals it ON it.Invoice_Number = ii.Invoice_Number
WHERE ii.ItemNum = '4011'
AND it.datetime > '05/15/2015'
GROUP BY DATENAME(MM, datetime) + ' ' + CAST(DAY(datetime) AS VARCHAR(2))

热门查询的结果:

  1. 2015-05-15 91.43
  2. 2015-05-16 84.77
  3. 底层查询的结果:

    1. 6月1日128.34
    2. 6月10日85.06
    3. 热门查询以我需要的顺序为我提供了所需的信息。 底部查询给出了我需要的日期格式,但顺序错误。

1 个答案:

答案 0 :(得分:3)

如果您确实需要应用不同的格式,可以使用派生表来执行此操作:

select 
    DATENAME(MM, [date]) + ' ' + CAST(DAY([date]) AS VARCHAR(2)) AS [DD Month], 
    total_quantity 
from 
(
    SELECT  CAST([Datetime] AS DATE) AS [date], SUM(quantity) as total_quantity
    FROM Invoice_Itemized ii
    INNER JOIN Invoice_Totals it ON it.Invoice_Number = ii.Invoice_Number
    WHERE ii.ItemNum = '4011'
    AND it.[datetime] > '05/15/2015'
    GROUP BY CAST(Datetime AS DATE)
) as X

这样,您可以将结果包装到派生表中,然后对其应用其余操作。

我认为这也可行,但现在无法测试:

SELECT  DATENAME(MM, CAST([datetime] AS DATE)) + ' ' 
+ CAST(DAY(CAST([datetime] AS DATE)) AS VARCHAR(2)) AS [DD Month], 
SUM(quantity) as total_quantity
FROM Invoice_Itemized ii
INNER JOIN Invoice_Totals it ON it.Invoice_Number = ii.Invoice_Number
WHERE ii.ItemNum = '4011'
AND it.[datetime] > '05/15/2015'
GROUP BY CAST([datetime] AS DATE)