2014-12-04 39 views
0

我有一个查询返回多行结果。我的查询如下:根据行值创建一个字段(数据透视?)

select * from containertbl where bol_key = 236377502 

我的结果是这样的:

query results

我想对于结果看起来像这样

desired results

我曾尝试数据透视表(并进行了多次尝试,但从未得到任何结果),但我不希望该值是字段名称。此外,容器数量未知。

非常感谢您的帮助!

+0

的[高效行转换为列在SQL Server]可能重复(http://stackoverflow.com/questions/15745042/efficiently-convert- rows-to-columns-in-sql-server) – pseudocoder 2014-12-04 21:55:37

+1

如果你尝试失败,你应该将它们发布到你的问题中。对于犯同样错误的人可能会有用。 – pseudocoder 2014-12-04 21:56:51

回答

0

我认为动态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 Fiddle here

相关问题