也許是這樣的。
這隻有在名稱列是唯一的時才起作用。如果沒有,那麼你可能想追加一個ID。
所以首先一些測試數據:
CREATE TABLE tblValues
(
ID INT,
Name VARCHAR(100),
ValueID INT,
Value VARCHAR(100)
)
INSERT INTO tblValues
VALUES
(100,'Color',10000,'Black'),
(101,'Size',10005,'Large')
然後,你需要得到列轉動上:
DECLARE @cols VARCHAR(MAX)
;WITH CTE AS
(
SELECT
'Name_'+CAST(tbl.ID AS VARCHAR(100)) AS Name,
'Name_'+CAST(tbl.ID AS VARCHAR(100)) AS Sort,
tbl.ID
FROM
tblValues AS tbl
UNION ALL
SELECT
tbl.Name,
'Value_'+CAST(tbl.ID AS VARCHAR(100)) AS Sort,
tbl.ID
FROM
tblValues AS tbl
)
SELECT
@cols = COALESCE(@cols + ','+QUOTENAME(Name),
QUOTENAME(Name))
FROM
CTE
ORDER BY
CTE.ID,
CTE.Sort
然後宣佈和執行動態SQL這樣的:
DECLARE @query NVARCHAR(4000)=
N'SELECT
*
FROM
(
SELECT
''Name_''+CAST(tbl.ID AS VARCHAR(100)) AS pivotName,
CAST(tbl.ValueID AS VARCHAR(100)) AS name
FROM
tblValues AS tbl
UNION ALL
SELECT
tbl.Name AS pivotName,
tbl.Value AS name
FROM
tblValues AS tbl
) AS p
PIVOT
(
MAX(name)
FOR pivotName IN ('[email protected]+')
) AS pvt'
EXECUTE(@query)
然後在我的情況下,我會刪除我創建的表
DROP TABLE tblValues
編輯
或者在你情況下,應該是這樣的:
第一列:
DECLARE @cols VARCHAR(MAX)
;WITH CTE AS
(
SELECT
'Name_'+CAST(tbl.ID AS VARCHAR(100)) AS Name,
'Name_'+CAST(tbl.ID AS VARCHAR(100)) AS Sort,
tbl.ID
FROM
[Table] AS tbl
WHERE
tbl.OptionID = 1000000
UNION ALL
SELECT
tbl.Name,
'Value_'+CAST(tbl.ID AS VARCHAR(100)) AS Sort,
tbl.ID
FROM
[Table] AS tbl
WHERE
tbl.OptionID = 1000000
)
SELECT
@cols = COALESCE(@cols + ','+QUOTENAME(Name),
QUOTENAME(Name))
FROM
CTE
ORDER BY
CTE.ID,
CTE.Sort
然後動態SQL。
DECLARE @query NVARCHAR(4000)=
N'SELECT
*
FROM
(
SELECT
''Name_''+CAST(tbl.ID AS VARCHAR(100)) AS pivotName,
CAST(tbl.ValueID AS VARCHAR(100)) AS name
FROM
[Table] AS tbl
WHERE
tbl.OptionID = 1000000
UNION ALL
SELECT
tbl.Name AS pivotName,
tbl.Value AS name
FROM
[Table] AS tbl
WHERE
tbl.OptionID = 1000000
) AS p
PIVOT
(
MAX(name)
FOR pivotName IN ('[email protected]+')
) AS pvt'
EXECUTE(@query)
您不需要創建表或刪除表。那只是因爲我的數據庫中沒有你的表格,並且如果有人想要運行這個例子。
你可以顯示你的表格,樣本數據和所需的結果嗎?你能否解釋一下「不起作用」的含義? – 2012-02-14 03:17:45
@Aaron:'Table'是一列X列行數爲4列的結果,整個查詢不起作用。甚至可以樞軸處理這個? – 2012-02-14 03:20:05
我不知道。這就是爲什麼我要求瞭解你想要完成的更多細節。你可以顯示你的表結構('CREATE TABLE'),樣本數據以及你想要的查詢輸出結果嗎?否則,我不知道這個數據透視預計會處理什麼「這個」。 – 2012-02-14 03:22:04