2016-05-10 2 views
1

Мои данные, как это:SQL поворота сервер запрос возвращает только одну строку

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

идентификаторы все же - '13'. Вот почему вы получаете 1 ряд. – gofr1

+1

Что вы хотите, чтобы он вернулся? –

+0

Я хочу, чтобы динамический результат добавлял столбец в таблицу и добавлял значение в таблицу с незакрашенными дочерними элементами и получал результат с этой комбинацией. когда id добавить столбец в таблицу, этот результат добавляет новый столбец с записью по таблице ниже –

ответ

1

Если вы получили тот же 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 
Смежные вопросы