2012-03-07 9 views
0

SqlServer 2008を使用して、1年間のすべての売上げを取得する一時テーブル(#tmpAllSales)があります。私は今年の売上高と前四半期の売上高を含むSELECT文を作成したいと思います。このようなSQL 2つの異なる日付範囲のデータを1つの結果セットにまとめる

何かが(@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 

それぞれ別々のクエリは、私が望む結果を与えるが、私はに結合する方法がわかりません1つの結果セット。

EDIT

私は会社ごとに1つの行にすべての結果を取得したいと思い、私のオリジナルのポストでそれを明確にしませんでした。私はExcelのマクロでこれを使用しているので、すべての情報が1つの行にある場合は素晴らしいでしょう。その後、

答えて

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用の2つの行を各社に提供します。 Company、TotalCallsQTD、FreeCallsQTD、SalesRelatedCallsQTD、SoldCallsQTD、TotalCallsYTD、FreeCallsYTD、SalesRelatedCallsYTD、SoldCallsYTD)を持つ各会社のデータを1つの行に結合する方法はありますか?私はExcelマクロでこれを使用しているので、会社ごとにすべてが1行にあれば大いに役立ちます。 – BrianKE

+0

私はこの解決策に投票しましたが、質問に答えてくれましたが、私が望む結果では解決しませんでした。 – BrianKE

+0

優秀、魅力のように働く!迅速な対応に感謝します。 – BrianKE

関連する問題