0
我有一個查詢返回多行結果。我的查詢如下:根據行值創建一個字段(數據透視?)
select * from containertbl where bol_key = 236377502
我的結果是這樣的:
我想對於結果看起來像這樣
我曾嘗試數據透視表(並進行了多次嘗試,但從未得到任何結果),但我不希望該值是字段名稱。此外,容器數量未知。
非常感謝您的幫助!
我有一個查詢返回多行結果。我的查詢如下:根據行值創建一個字段(數據透視?)
select * from containertbl where bol_key = 236377502
我的結果是這樣的:
我想對於結果看起來像這樣
我曾嘗試數據透視表(並進行了多次嘗試,但從未得到任何結果),但我不希望該值是字段名稱。此外,容器數量未知。
非常感謝您的幫助!
我認爲動態SQL是在這種情況下唯一的方法,因爲確切數量的樞軸列是未知的。你不妨看看here:
DECLARE @query AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
-- A nested query is used here to generate the required sequence for the column names of the
-- pivoted columns, i.e. [container1],[container2],[container3],[container4],[container5],[container6] etc.
SELECT @ColumnName= ISNULL(@ColumnName + ',','') + QUOTENAME(PivotColumnName)
FROM (SELECT bol_key, containerId, 'container' + CONVERT(VARCHAR(10), rn) AS PivotColumnName
FROM (
SELECT bol_key, containerId, ROW_NUMBER() OVER (PARTITION BY bol_key ORDER BY containerId) AS rn
FROM containertbl
) t) s
--Prepare the PIVOT query using the columns names calculated
SET @query =
N'SELECT bol_key, ' + @ColumnName + '
FROM (SELECT bol_key, containerId,' + CHAR(39) + 'container' + CHAR(39) + ' + CONVERT(VARCHAR(10), rn) AS PivotColumnName
FROM (
SELECT bol_key, containerId, ROW_NUMBER() OVER (PARTITION BY bol_key ORDER BY containerId) AS rn
FROM containertbl) t) s
PIVOT(MAX(containerId)
FOR PivotColumnName IN (' + @ColumnName + ')) AS PvtTable'
--Execute the dynamic pivot query
EXEC sp_executesql @query
的[高效行轉換爲列在SQL Server]可能重複(http://stackoverflow.com/questions/15745042/efficiently-convert- rows-to-columns-in-sql-server) – pseudocoder 2014-12-04 21:55:37
如果你嘗試失敗,你應該將它們發佈到你的問題中。對於犯同樣錯誤的人可能會有用。 – pseudocoder 2014-12-04 21:56:51