2012-03-07 262 views
0

使用SqlServer 2008,我有一個臨時表(#tmpAllSales),它捕獲一年的所有銷售額。我想創建一個SELECT語句,其中包含當年的銷售額以及上一季度的銷售額。SQL將來自兩個不同日期範圍的數據合併到一個結果集中

像這樣的東西(@StartDate & @EndDate被定義爲一個季度開始/結束):

--QTD Sales By Company 
SELECT 
    Company, 
    SUM(Call) as TotalCallsQTD, 
    SUM(Call) - SUM(SoldCall) as FreeCallsQTD, 
    SUM(SalableCall) as SalesRelatedCallsQTD, 
    SUM(SoldCall) as SoldCallsQTD 
FROM 
    #tmpAllSales 
WHERE 
    CalledOn between @StartDate and @EndDate 
GROUP BY 
    Company 

--COMBINED WITH BASED ON Company 

--YTD Sales By Company 
SELECT 
    Company, 
    SUM(Call) as TotalCallsYTD, 
    SUM(Call) - SUM(SoldCall) as FreeCallsYTD, 
    SUM(SalableCall) as SalesRelatedCallsYTD, 
    SUM(SoldCall) as SoldCallsYTD 
FROM 
    #tmpAllSales 
GROUP BY 
    Company 
ORDER BY 
    Company 

每個單獨的查詢給我想要的結果,但我不知道如何結合成一個結果集。

編輯

我沒能在原來的職位,我想獲得的所有每家公司一行的結果清晰。我在一個Excel宏中使用它,所以如果所有的信息都在一行上,那將會很棒。

回答

1
SELECT 
    Period = 'QTD', 
    Company, 
    SUM(Call) as TotalCallsQTD, 
    SUM(Call) - SUM(SoldCall) as FreeCallsQTD, 
    SUM(SalableCall) as SalesRelatedCallsQTD, 
    SUM(SoldCall) as SoldCallsQTD 
FROM 
    #tmpAllSales 
WHERE 
    CalledOn between @StartDate and @EndDate 
GROUP BY 
    Company 
UNION ALL 
SELECT 
    Period = 'YTD', 
    Company, 
    SUM(Call) as TotalCallsYTD, 
    SUM(Call) - SUM(SoldCall) as FreeCallsYTD, 
    SUM(SalableCall) as SalesRelatedCallsYTD, 
    SUM(SoldCall) as SoldCallsYTD 
FROM 
    #tmpAllSales 
GROUP BY 
    Company 
ORDER BY 
    Period, Company; 

如果你希望他們作爲一個單列爲每個公司,則:

;WITH q AS 
(
    SELECT 
     Company, 
     SUM(Call) as TotalCallsQTD, 
     SUM(Call) - SUM(SoldCall) as FreeCallsQTD, 
     SUM(SalableCall) as SalesRelatedCallsQTD, 
     SUM(SoldCall) as SoldCallsQTD 
    FROM 
     #tmpAllSales 
    WHERE 
     CalledOn between @StartDate and @EndDate 
    GROUP BY 
     Company 
), y AS 
(
    SELECT 
     Company, 
     SUM(Call) as TotalCallsYTD, 
     SUM(Call) - SUM(SoldCall) as FreeCallsYTD, 
     SUM(SalableCall) as SalesRelatedCallsYTD, 
     SUM(SoldCall) as SoldCallsYTD 
    FROM 
     #tmpAllSales 
    GROUP BY 
     Company 
) 
SELECT q.Company, qTotalCallsYTD = q.TotalCallsYTD, etc..., 
    yTotalCallsYTD = y.TotalCallsYTD, etc... 
FROM q INNER JOIN y 
ON q.Company = y.Company 
ORDER BY q.Company; 
+0

這工作,但我沒有想到的結果我會得到的。這給了我兩行,每個公司一個YTD和一個QTD。有沒有辦法將每個公司的數據組合成一行(即公司,TotalCallsQTD,FreeCallsQTD,SalesRelatedCallsQTD,SoldCallsQTD,TotalCallsYTD,FreeCallsYTD,SalesRelatedCallsYTD,SoldCallsYTD)。我在一個Excel宏中使用這個,所以如果每個公司都有一行的話,它會有很大的幫助。 – BrianKE 2012-03-07 15:49:26

+0

我做了投票這個解決方案,因爲它確實回答了問題,但沒有與我想要的結果。 – BrianKE 2012-03-07 15:50:06

+0

非常好,像魅力一樣工作!感謝您的快速回復。 – BrianKE 2012-03-07 15:57:33

相關問題