0

複数のレコードを1つのレコードとしてクエリを作成したいのですが、Pivo​​tを使いたくないのですが、解決策はありますか?

ここに表があります:

ID   Element_Name  Value
1    Parmitha      100
2    Anggun        200
3    Chandra       300
4    BagusofTerror 400

そして、私は結果が次のようになりたい:

paramitha , anggun, chandra , bagusofterror
100 , 200, 300, 400
4

3 に答える 3

1

を使用for xml path ('')して、列の値を転置できます。

たとえば、次のように書くことができます

select Element_Name + ', '
from TheTable
for xml path ('');

取得するためParmitha, Anggun, Chandra, BagusofTerror,

これがライブデモです: http://www.sqlfiddle.com/#!3/71f88/24

于 2013-01-31T09:23:30.527 に答える
0

これを試して :-

Select 
    MAX(CASE WHEN colID = 1 THEN value ELSE NULL END) AS [Parmitha],
    MAX(CASE WHEN colID = 2 THEN value ELSE NULL END) AS [Anggun],
    MAX(CASE WHEN colID = 3 THEN value ELSE NULL END) AS [Chandra],
    MAX(CASE WHEN colID = 4 THEN value ELSE NULL END) AS [BagusofTerror]

FROM    
(
    SELECT  ROW_NUMBER() OVER (ORDER BY ID) AS colID,
            ID,
            Element_Name,
            value
        FROM    Sample
    ) AS d

SQLデモ

動的クエリとxmlパスを使用して、ウルフの答えを考慮に入れる

DECLARE @cols AS NVARCHAR(MAX),
@query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' 
                    + convert(varchar(max), Element_Name, 120)
                from Sample
        FOR XML PATH(''), TYPE
        ).value('.', 'varchar(MAX)') 
    ,1,1,'')


set @query = 'SELECT' + @cols + ' from 
         (
            select  value, Element_Name
            from Sample
        ) x
        pivot 
        (
            max(value)
            for Element_Name in (' + @cols + ')
        ) p '

 execute(@query);

デモ

ちなみに、使用しないでくださいPIVOT.PIVOTを使用すると、同じ結果が得られます

 Select [Parmitha],[Anggun],[Chandra],[BagusofTerror] 
 FROM 
 (
  Select value,element_name from Sample
 )src
 pivot
 (
  max(value)
  for Element_Name in ([Parmitha],[Anggun],[Chandra],[BagusofTerror])
 )pvt
于 2013-01-31T09:29:46.573 に答える
0

COALESCE を使用して、列の結果セットを varchar 変数にピボットすることもできます。

CREATE TABLE #Pivot
(ID int, Element_Name varchar(50), Value int)

INSERT #Pivot values (1,'Parmitha',100)
INSERT #Pivot values (2,'Anggun',200)
INSERT #Pivot values (3,'Chandra',300)
INSERT #Pivot values (4,'BagusofTerror',400)

DECLARE @titles VARCHAR(1000)
DECLARE @values VARCHAR(1000)
SET @titles = ''
SET @values = ''

SELECT @titles = @titles + COALESCE(Element_Name + ',' , '')
FROM #Pivot ORDER BY ID

SELECT @values = @values + COALESCE(convert(varchar, Value) + ',' , '')
FROM #Pivot ORDER BY ID

SELECT @titles
UNION ALL
SELECT @values

与えます:

パルミサ、アングン、チャンドラ、バグソフテラー、

100,200,300,400,

于 2013-01-31T09:35:17.530 に答える