2011-09-05 45 views
1

需要此幫助。如何使用SQL查詢獲得此輸出

我有這張數據表的插圖。 (有不同的客戶數據的許多其他行。在回答一定要考慮這一點)

RowID Customer  Category  Date  Figure1 
    1  Cust1  Week 1  Jun-11  10 
    2  Cust1  Week 2  Jun-11  20 
    3  Cust1  Week 3  Jun-11  30 
    4  Cust1  Week 4  Jun-11  40 
    5  Cust1  Actual  Jun-11  200 
    6  Cust1  Forecast  Jun-11  100 
    7  Cust2  Forecast  Jun-11  100 

我想有它顯示包括RowID上的擺動分類類別Actual只(第5行),如圖所示低於

這應該是輸出。

RowID Customer Date  Week1 Week2 Week3 Week4 Actual Forecast 
    5 Cust1 Jun-11 10  20  30  40  200  100 

任何幫助,將不勝感激。

在此先感謝。

試過樞軸,但它給了我這不是我想要的。

RowID Customer Date  Week1 Week2 Week3 Week4 Actual Forecast 
    1 Cust1 Jun-11 10  null null null null null 
    2 Cust1 Jun-11 null 20  null null null null 
    3 Cust1 Jun-11 null null 30  null null null 
    4 Cust1 Jun-11 null null null 40  null null 
    5 Cust1 Jun-11 null null null null 200  null 
    6 Cust1 Jun-11 null null null null null 100 
+0

你有沒有試過pivot cmd? http://msdn.microsoft.com/en-us/library/ms177410.aspx – bryanmac

+0

使用數據透視表http://msdn.microsoft.com/en-us/library/ms177410.aspx和http://www.kodyaz .com/articles/t-sql-pivot-tables-in-sql-server-tutorial-with-examples.aspx –

+0

我已經添加了pivoted的結果。在上面的問題中添加。但那不是我想要的。任何幫助? – user696383

回答

1

PIVOT是好的,但你需要GROUP BYSUM之後。

或者,您可以在所有不同的代碼標準上自行聯接,但它可以比在一個位置使用PIVOT可以獲得的值列表略少。

0

你可以這樣來做:

SELECT 
     RowID, 
     Customer, 
     Date, 
     (SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 1') AS Week1, 
     (SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 2') AS Week2, 
     (SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 3') AS Week3, 
     (SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 4') AS Week4, 
     (SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Actual') AS Actual, 
     (SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Forecast') AS Forecast 

    FROM 
     sotest 

    WHERE 
     Customer = 'Cust1' 
     AND Date = 'Jun-11' 
     AND Category = 'Actual' 

應該很容易在存儲過程中,您可以通過在客戶和日期PARAMS在收官

0

儘量在此基礎上的解決方案兩個參數(@MyCustomer & @MyDate):

DECLARE @MyCustomer VARCHAR(10) = 'Cust1' 
    ,@MyDate VARCHAR(10) = 'Jun-11'; 

SELECT pvt.* 
FROM 
(
SELECT t.Customer, t.Date, t.Category, t.Figure1 
FROM MyTable t 
WHERE t.Customer = @MyCustomer AND t.[Date] = @MyDaye 
) src 
PIVOT (SUM(src.Figure1) FOR src.Category IN ([Week 1], [Week 2], [Week 3], [Week 4], [Actual], [Forecast])) pvt 

的基本思想是在012到過濾派生的表只有那些行和列需要的樞軸,沒有什麼或多或少的。