2014-02-18 19 views
1

我有以下查詢,顯示一個值作爲柱,其他AS價值在SQL

SELECT AT.Name AS Name, COALESCE(VAL.Value, VALP.Value) AS Value 
FROM Attributes AT 
     LEFT OUTER JOIN AttributesValues VAL ON VAL.AttributeID = AT.ID 
     LEFT OUTER JOIN AttributesValues VALP ON VALP.AttributeID = AT.ID 
     LEFT OUTER JOIN Products p ON p.ID = VAL.ProductID 
     LEFT OUTER JOIN AttributesGroups G ON G.ID = AT.GroupID 
ORDER BY p.ID; 

我所尋找的節目名稱,列和值列值。例如,

Name1 | Name2 | Name3 
----------------------- 
Value1 | Value2 | Value3 
+1

你嘗試'pivot'表? –

+0

您可以嘗試使用** pivot **功能... 檢查這些鏈接... http://www.codeproject.com/Questions/548618/PivotplusExampleplusinplusSQLplusServer http://www.codeproject.com /提示/ 500811 /簡易路易用的關鍵數據在-SQL查詢 – tarzanbappa

回答

3

希望這個作品您的具體情況最好的..

CREATE TABLE #temp(Name varchar(25),value varchar(25)) 
INSERT #temp VALUES('a',1),('b',2),('c',3),('d',4),('e',4),('f',5) 

首先創建一個逗號分隔字符串,你的名字,所以你可以用它作爲支點列。

DECLARE @CommoSeperatedNames varchar(max) 
SELECT @CommoSeperatedNames=STUFF((SELECT ',' + s.Name FROM #temp s ORDER BY s.Name FOR XML PATH('')),1,1,'') 

此查詢使用支點,我在這裏使用動態查詢來獲得從上述變量的所有列名。

Execute('select '[email protected]+' from #temp 
pivot 
(
    MIN(value) 
    FOR Name 
    IN ('+ @CommoSeperatedNames+') 
) as TST') 

如果我們打印上面的動態查詢,它會輸出以下語句。

select a,b,c,d,e,f from #temp 
pivot 
(
    MIN(value) 
    FOR Name 
    IN (a,b,c,d,e,f) 
) as TST 

輸出:

a b c d e f 
1 2 3 4 4 5 
相關問題