如何将行数据转换为SQL中的列

时间:2010-06-07 21:46:56

标签: sql sql-server sql-server-2005 pivot

我已经研究过枢轴,但我认为它需要一个我不需要的聚合函数(我认为)。

我的查询结果是

    Name          Property Name        PropertyValue
   ----------      ----------            ----------
     lorem          Work Phone         000.111.2020
     ipsum          Email              test@email.com

Name          Work Phone                Email
----------    ----------            ----------
lorem        000.111.2020        test2@email.com
ipsum        001.101.2010        test3@email.com

我认为我不应该在这里使用pivot,因为我不需要聚合任何东西,我只想让行数据成为一列。

2 个答案:

答案 0 :(得分:3)

使用:

  SELECT t.name, 
         MAX(CASE WHEN t.property = 'Work Phone' THEN t.value ELSE NULL END),
         MAX(CASE WHEN t.property = 'Email' THEN t.value ELSE NULL END)
    FROM TABLE t
GROUP BY t.name

您必须使用聚合函数,否则您将拥有多个具有NULL的行。

答案 1 :(得分:2)

PIVOT需要汇总,是的,如果您的数据是:

,则需要汇总
Name          Property Name        PropertyValue 
   ----------      ----------            ---------- 
     lorem          Work Phone         000.111.2020 
     lorem          Work Phone         999.999.9999
     ipsum          Email              test@email.com 

鉴于知道你的数据是唯一的,你可以在你的数据透视中使用MIN或MAX。

注意:您的示例输出与您的exmaple输入不匹配。

http://cloudexchange.cloudapp.net/stackoverflow/q/2589

-- SO2993412

DECLARE @t AS TABLE (Name varchar(25), [Property Name] varchar(25), PropertyValue varchar(25))
INSERT INTO @t VALUES ('lorem', 'Work Phone', '000.111.2020')
    ,('ipsum', 'Email', 'test@email.com')

SELECT Name, [Work Phone], [Email]
FROM @t
PIVOT (MAX(PropertyValue) FOR [Property Name] IN ([Work Phone], [Email])) AS pvt