2011-08-23 184 views
1


我想知道創建顯示兩個不同月份(在參數中選擇)的銷售額的查詢時最常用的方法。
用於顯示兩個不同月份銷售額的SQL查詢

我的數據庫看起來是這樣的:

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

+0

最常用的方法是「地方」 clausule,也通常是對字段名稱不能使用空格(但可以),或許像'其中「發佈日期」> = @ PostingDate1和「發佈日期'<= @ PostingDate2'(使用'請在這裏)將有所幫助。我認爲你的問題不清楚。 –

回答

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 
+0

交叉連接的「on」clausule怎麼樣? –

+0

@Luis Siquot - 一個'CROSS JOIN'不使用'ON'子句,它只是兩個表之間的笛卡爾積。 – Lamak

+0

是的,你是對的,我總是使用逗號語法。所以它至少需要一個where子句,比如'A.Company = B.Company',或者在其他情況下爲表中的多條記錄,它會混淆所有數據 –

0

我的回答:

我結束了使用「聯盟」,鴕鳥政策知道這是否是比較合適的,但它得到了使用去掉冗餘數據的「 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 
相關問題