SQL查询以按年度联接2组结果

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

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_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;