0

我想从多条记录中创建一个查询作为一条记录,但我不想使用 Pivot,有什么解决方案吗?

这是表格:

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 演示

考虑到 Wolf 的回答,使用动态查询和 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.Using 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

给出:

Parmitha、Anggun、Chandra、BagusofTerror、

100,200,300,400,

于 2013-01-31T09:35:17.530 回答