SQL查询以按年度联接2组结果
SQL问题: 我有一个疑问:SQL查询以按年度联接2组结果,sql,ssrs-2008,Sql,Ssrs 2008,SQL问题: 我有一个疑问: SELECT MONTHNAME(date) AS month, Year(getdate()) AS Year, COUNT(*) AS monthly_sales_count FROM orders WHERE status = 0 AND YEAR(date) = 2012 GROUP BY month; 这给了我2012年每月的结果 如何将2011年的结果添加到一组数据中,因此我会得到如下结果: Month Year Monthly
SELECT MONTHNAME(date) AS month, Year(getdate()) AS Year, COUNT(*) AS monthly_sales_count
FROM orders
WHERE status = 0
AND YEAR(date) = 2012
GROUP BY month;
这给了我2012年每月的结果
如何将2011年的结果添加到一组数据中,因此我会得到如下结果:
Month Year Monthly_sales_count
december 2012 6576
november 2012 8788
october 2012 7676
september 2012 56
august 2012 345
july 2012 3356
june 2012 6563
may 2012 3245
april 2012 25234
march 2012 234
february 2012 454
january 2012 24352
december 2011 6576
november 2011 8788
october 2011 7676
september 2011 1313
august 2011 1343
july 2011 2243
june 2011 656
may 2011 3234
april 2011 435345
march 2011 34345
february 2011 2134
january 2011 3412
尽管我希望使WHERE子句可搜索(利用索引)
选择月(日期)作为月,选择年(日期)作为年,选择计数(*)作为月销售计数
从命令
其中status=0
日期>='20110101'和日期<'20130101'
按月份、年份分组;
注意:你在做的是
YEAR(GETDATE())
,而我假设你实际上想做YEAR(date)
——如果你是故意的,那么你需要更多关于确切需求的信息。us union与另一个查询一起提供输入,如2011Downside,如果你想要2年以上,它很快就会变得笨拙。加上UNION将在任何可能和适当的情况下应用一个独特的UNION,所以在这里支持UNION ALL。我不认为将多个查询联合起来比使用更大的WHERE
子句更好。
SELECT MONTHNAME(date) AS month, Year(getdate()) AS Year,
COUNT(*) AS monthly_sales_count
FROM orders
WHERE status = 0
AND YEAR(date) = 2012
GROUP BY month
union
SELECT MONTHNAME(date) AS month, Year(getdate()) AS Year,
COUNT(*) AS monthly_sales_count
FROM orders
WHERE status = 0
AND YEAR(date) = 2011
GROUP BY month;
SELECT MONTHNAME(date) AS month, Year(date) AS Year, COUNT(*) AS monthly_sales_count
FROM orders
WHERE status = 0
AND date >= '20110101' AND date < '20130101'
GROUP BY month, year;
SELECT MONTHNAME(date) AS month, Year(getdate()) AS Year,
COUNT(*) AS monthly_sales_count
FROM orders
WHERE status = 0
AND YEAR(date) = 2012
GROUP BY month
union
SELECT MONTHNAME(date) AS month, Year(getdate()) AS Year,
COUNT(*) AS monthly_sales_count
FROM orders
WHERE status = 0
AND YEAR(date) = 2011
GROUP BY month;