用于显示两个不同月份的销售额的SQL查询

时间:2011-08-23 14:18:17

标签: sql visual-studio-2010 parameters


我想知道在创建显示两个不同月份的销售额(在参数中选择)的查询时,最常用的方法。

我的数据库看起来像这样:

Posting Date    Company      Size    Sales
01/01/2011      Microsoft    1000    900

我已经有一个参数选择了“年月”。 我想要的是有两个参数,以便我可以在Microsoft Visual Studio中并排比较“年月”中的销售。

因此查询应该有两个参数,@ PostingDate1和@PostingDate2

感谢您的帮助!

- UPDATE -

试图让这更容易理解。
可供选择的两个参数将是“年月”
因此,当参数1:2011年1月和参数2:2011年2月选择“年月”时,结果表将如下所示(无论选择哪个月,结果将显示不同月份)

Company     Size     Sales1    Sales2
Microsoft   1000     100       200

即如果2011年1月的销售额为100
2011年2月的销售额为200

2 个答案:

答案 0 :(得分:1)

我认为你想做CROSS JOIN,但我不完全确定我理解你的问题。如果您的查询结果是第一行,那么我建议使用CROSS JOIN,不是,那么最好不要使用它。它应该是这样的:

SELECT A.[Posting Date] [Posting Date 1], A.Company Company1, A.Size Size1, A.Sales Sales1,
       B.[Posting Date] [Posting Date 2], B.Company Company2, B.Size Size2, B.Sales Sales2
FROM (SELECT [Posting Date], Company, Size, Sales
      FROM YourTable
      WHERE [Posting Date] = @PostingDate1) A
CROSS JOIN (SELECT [Posting Date], Company, Size, Sales
            FROM YourTable
            WHERE [Posting Date] = @PostingDate2) B

答案 1 :(得分:0)

我的回答:

我最终使用“UNION”,不知道这是否更合适,但是它使用“CROSS JOIN”摆脱了冗余数据。

SELECT 
A.Company, A.Size, SUM(A.Sales) as Sales1, SUM(B.Sales2)
FROM
(
(SELECT Company, Size, Sales as Sales, 0 as Sales2
FROM Sales
WHERE Posting date = @PostingDate1) AS A
UNION
(SELECT Company, Size, 0 as Sales, Sales as Sales2
FROM Sales
WHERE Posting date = @PostingDate2)
) AS B
)
GROUP BY 
A.Company, A.Size