2016-05-10 37 views
1

我的数据是这样的:SQL Server的支点查询只返回一行

ID ColumnName columnnvalue 
----------------------------- 
13 seraialnew tester name 
13 serial  123123 
13 seraialnew am444 
13 serial  33333 


SELECT id,seraialnew,serial 
    FROM (
    SELECT id,columnnvalue, ColumnName FROM dbo.formValues 
) cols 
PIVOT(
    MAX(id) 
    FOR ColumnName IN(seraialnew,serial) 
)p 

,并得到单列结果不是多个

+1

的ID都是一样的 - '13'。这就是为什么你得到1排。 – gofr1

+1

你想让它返回什么? –

+0

我想创建一个表的动态结果添加列,并在neasted子表中添加值并使用此组合获得结果。当id将列添加到表中时,此结果将在下表中添加具有记录的新列 –

回答

1

如果你有相同的id都只会有一个字符串,所以我换了ID,用于您的行2:

;WITH formValues AS (
SELECT * 
FROM (VALUES 
(13,'seraialnew','tester name'), 
(13,'serial','123123'), 
(14,'seraialnew','am444'), 
(14,'serial','33333') 
) as t(ID, ColumnName, columnnvalue) 
) 

SELECT id,seraialnew,serial 
    FROM (
    SELECT id,columnnvalue, ColumnName 
    FROM formValues 
) cols 
PIVOT(
    MAX(columnnvalue) 
    FOR ColumnName IN(seraialnew,serial) 
)p 

会给你:

id seraialnew serial 
13 tester name 123123 
14 am444  33333 

另一种方式:

SELECT * 
FROM (
    SELECT id, 
      columnnvalue, 
      ColumnName+CAST(ROW_NUMBER() OVER (PARTITION BY ColumnName ORDER BY ColumnName) as nvarchar(1)) as ColumnName 
    FROM formValues 
) cols 
PIVOT(
    MAX(columnnvalue) 
    FOR ColumnName IN(seraialnew1,serial1,seraialnew2,serial2) 
)p 

用相同id = 13会给你这样的:

id seraialnew1 serial1 seraialnew2 serial2 
13 am444  33333 tester name 123123