我有一个简单的陈述开始:
SELECT a.product, MONTH(a.saledate) AS Month, Count(*) AS Total
例如,
产生的结果Product Month Total
Bike 8 1000
任何人都可以建议是否可以在此查询中添加月份名称,并且是否也可以每月显示总数?
谢谢!
答案 0 :(得分:2)
获得月份名称有两种方法
1)
SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (MONTH(a.saledate) * 4) - 3, 3)
2)
DATENAME(month, a.saledate)
有些人说你可能在使用MYSQL:
然后得到月份名称:
SELECT MONTHNAME( a.saledate);
答案 1 :(得分:2)
示例中的查询计算表格中的所有行,然后在随机选择的行的产品和销售日期旁边显示该计数。那几乎可以肯定 - 不是你想要的。 MySQL就是这样古怪的。其他DBMS拒绝您的示例查询。
如果您想显示已售产品的月度摘要,请参阅以下基本查询:
SELECT a.product,
LAST_DAY(a.saledate) AS month_ending,
COUNT(*) AS Total
FROM table a
GROUP BY a.product, LAST_DAY(a.saledate)
The LAST_DAY()
function是从日期中提取月份和年份的好方法。
最后,如果要显示月份的文本名称,可以使用the DATE_FORMAT()
function来执行此操作。 %b
作为格式说明符提供三个字母的月份名称,%M
给出完整的月份名称。所以这个查询就可以了。
SELECT a.product,
LAST_DAY(a.saledate) AS month_ending,
DATE_FORMAT(LAST_DAY(a.saledate), '%M %Y')) AS month
COUNT(*) AS Total
FROM table a
GROUP BY a.product, LAST_DAY(a.saledate)
在SQL Server 2012+中,您可以使用the EOMONTH()
function代替LAST_DAY()
。
在SQL Server 2008+中,您可以使用DATENAME(mm, a.saledate)
从日期中检索月份名称。