2011-02-01 37 views
0

我有兩個表:tblSizes和tblColors。 tblColors具有名爲ColorName,ColorPrice和SizeID的列。有一種尺寸可以製成多種顏色。我需要編寫一個查詢來選擇大小和所有顏色(作爲列)的大小,每個大小的價格在其各自的列中。如何在SQL中選擇記錄作爲列

顏色必須返回欄目,例如:

SizeID : Width : Height : Red : Green : Blue 
1---------220-----220----£15----£20-----£29 

希望這是有道理
謝謝

編輯:嘗試下面的代碼,但不能肯定什麼是錯的:

DECLARE @Colors NVARCHAR(4000), @Query NVARCHAR(MAX) 
SET @Colors = '' 

SELECT @Colors = @Colors + '[' + C.Color +'],' 
FROM tblTempProductSizesColors SC 
INNER JOIN tblColors C on SC.ColorID=C.ID 
GROUP BY Color 
ORDER BY Color 

SET @Colors = LEFT(@Colors,LEN(@Colors)-1) 


SET @Query = ' 
SELECT * 
FROM ( SELECT TS.Sizeid, TS.Width, TS.Height, TS.Depth, TC.Price 
     FROM tblTempProductSizes TS 
     INNER JOIN tblTempProductSizesColors TC 
     ON TS.SizeId = TC.SizeId INNER JOIN tblColors C on TC.ColorID=C.ID) A 
     PIVOT(SUM(Price) FOR C.Color IN ('[email protected]+')) AS PT' 

EXEC sp_executesql @Query 
+4

爲什麼你不能查詢數據庫,然後轉動的結果是你想要的格式? – OrangeDog 2011-02-01 15:22:50

+1

你在使用什麼數據庫引擎? – Lamak 2011-02-01 15:25:23

+0

@Lamak - 我正在使用MSSQL。 – Leigh 2011-02-01 15:36:58

回答

0

如果你不想w Rite的每種顏色,以及這些列的表達式,如果您有MSSQL 2005+,則可以使用動態SQL(首先,請確保查看此link)。
修訂如下評論

DECLARE @Colors NVARCHAR(4000), @Query NVARCHAR(MAX) 
SET @Colors = '' 

SELECT @Colors = @Colors + '[' + C.Color +'],' 
FROM tblTempProductSizesColors SC 
INNER JOIN tblColors C on SC.ColorID=C.ID 
GROUP BY Color 
ORDER BY Color 

SET @Colors = LEFT(@Colors,LEN(@Colors)-1) 


SET @Query = ' 
SELECT * 
FROM ( SELECT TS.Sizeid, TS.Width, TS.Height, TS.Depth, TC.Price, C.Color 
     FROM tblTempProductSizes TS 
     INNER JOIN tblTempProductSizesColors TC 
     ON TS.SizeId = TC.SizeId INNER JOIN tblColors C on TC.ColorID=C.ID) A 
     PIVOT(SUM(Price) FOR Color IN ('[email protected]+')) AS PT' 

EXEC sp_executesql @Query 
2
select s.Sizeid, s.Width, s.Height, 
Red = SUM(CASE WHEN c.ColorName = "Red" THEN c.ColorPrice ELSE 0 END), 
Blue = SUM(CASE WHEN c.ColorName = "Blue" THEN c.ColorPrice ELSE 0 END), 
Green = SUM(CASE WHEN c.ColorName = "Green" THEN c.ColorPrice ELSE 0 END) 
from tblSizes s 
join tblColors c on c.SizeId = s.SizeId 
group by s.Sizeid, s.Width, s.Height