SQL案例操作
我是sql方面的新手,一直在尝试解决一个关于订单信息表的问题。在本例中,我尝试使用case操作获取订单的月度报告,因此我应该有一个列,其中说明年份,另一个列说明月份,然后我应该有第1-20天、21-22天、23-24天和25天以上的列。我试着使用案例操作来获取那些天发生的订单数量。 我尝试了以下查询:SQL案例操作,sql,Sql,我是sql方面的新手,一直在尝试解决一个关于订单信息表的问题。在本例中,我尝试使用case操作获取订单的月度报告,因此我应该有一个列,其中说明年份,另一个列说明月份,然后我应该有第1-20天、21-22天、23-24天和25天以上的列。我试着使用案例操作来获取那些天发生的订单数量。 我尝试了以下查询: SELECT DATEPART(YEAR,date) AS year,DATEPART(MONTH,date) AS month, COUNT(CASE WHEN DAT
SELECT
DATEPART(YEAR,date) AS year,DATEPART(MONTH,date) AS month,
COUNT(CASE WHEN DATEPART(DAY,date) BETWEEN 1 AND 20 THEN order ELSE 0 END) AS D1_D20,
COUNT(CASE WHEN DATEPART(DAY,date) BETWEEN 21 AND 22 THEN order ELSE 0 END) AS D21_D22,
COUNT(CASE WHEN DATEPART(DAY,date) BETWEEN 23 AND 24 THEN order ELSE 0 END) AS D23_D24,
COUNT(CASE WHEN DATEPART(DAY,date) > 25 THEN order ELSE 0 END) AS D25_END
FROM ORDERS
GROUP BY DATEPART(YEAR,date),DATEPART(MONTH,date)
显然,这个查询的问题是,现在我只得到每天的订单总数,我知道我应该计算订单,但不知道语法。非常感谢您的帮助 使用SUM()
:
我建议使用函数DAY()
、YEAR()
和MONTH()
,因为它们更易于键入
顺便说一下,如果删除ELSE
子句,则可以使用COUNT()。您的特殊问题是COUNT(0)=COUNT(1)
,因为COUNT()
计算非NULL
值。我更喜欢SUM()
,因为它在这方面更直观
SELECT
DATEPART(YEAR, date) AS year, DATEPART(MONTH, date) AS month,
SUM(CASE WHEN DATEPART(DAY,date) BETWEEN 1 AND 20 THEN 1 ELSE 0 END) AS D1_D20,
SUM(CASE WHEN DATEPART(DAY,date) BETWEEN 21 AND 22 THEN 1 ELSE 0 END) AS D21_D22,
SUM(CASE WHEN DATEPART(DAY,date) BETWEEN 23 AND 24 THEN 1 ELSE 0 END) AS D23_D24,
SUM(CASE WHEN DATEPART(DAY,date) > 25 THEN 1 ELSE 0 END) AS D25_END
FROM ORDERS
GROUP BY DATEPART(YEAR, date), DATEPART(MONTH, date);