SQL Query按年加入2组结果

时间:2012-12-05 12:38:02

标签: 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_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

2 个答案:

答案 0 :(得分:2)

SELECT MONTHNAME(date) AS month, Year(date) AS Year, COUNT(*) AS monthly_sales_count
FROM orders
WHERE status = 0
AND YEAR(date) IN (2011, 2012)
GROUP BY month, year
ORDER BY year, month;

虽然我希望将WHERE子句设为sargable(使用索引)

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;

注意:
你正在做YEAR(GETDATE()),而我假设你真的想做YEAR(date) - 如果你有意思,那么就需要更多关于确切要求的信息。

答案 1 :(得分:0)

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;