2016-05-10 5 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

テーブルに動的な結果の追加列を作成し、最後の子テーブルに値を追加し、この組み合わせで結果を取得します。 idがテーブルにカラムを追加すると、この結果は新しいカラムをレコードの下のテーブルに追加します –

答えて

1

代わりに、複数の単一の行の結果を得るにはidので、1つの文字列のみが存在します私はあなたの行の2のためにidを変更:

;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 

はあなたを与える:

0123を
id seraialnew serial 
13 tester name 123123 
14 am444  33333 

別の方法:同じid = 13

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 seraialnew1 serial1 seraialnew2 serial2 
13 am444  33333 tester name 123123 
関連する問題