透视文本列行到列

时间:2013-11-04 09:13:48

标签: sql sql-server sql-server-2008 tsql

我有这样的列

    FIELDPID    FIELDNAME   VALUE
     12       COMPANY_NAME  Bristol bb
     12       CP_ID         47957
     12       CPID_TYPE         ORG
     67       COMPANY_NAME  PRODUCTS LTD
     67       CP_ID         47957
     67       CPID_TYPE     ORG
     69       COMPANY_NAME  PRODUCTS LTD
     69       CP_ID         47957
     69       CPID_TYPE     IND

我希望结果为

FIELDPID,COM​​PANY_NAME,CP_ID,CPID_TYPE

FIELDPID    COMPANY_NAME    CP_ID   CPID_TYPE
    12      Bristol bb      47957   ORG
    67      PRODUCTS LTD    47975   ORG

验证cpid_type必须只是“org” 谢谢您的帮助 阿伦

2 个答案:

答案 0 :(得分:2)

使用PIVOT表格运算符:

SELECT *
FROM tablename AS t
PIVOT
(
   MAX(Value)
   FOR FieldName IN([COMPANY_NAME],
                    [CP_ID],
                    [CPID_TYPE])
) AS p;

<强>更新

如果您想为CPID_TYPE添加条件,可以执行以下操作:

WITH CTE AS
(
    SELECT *
    FROM tablename AS t
    PIVOT
    (
       MAX(Value)
       FOR FieldName IN([COMPANY_NAME],
                        [CP_ID],
                        [CPID_TYPE])
    ) AS p
) 
SELECT * 
FROM CTE
WHERE CPID_TYPE = 'ORG';

答案 1 :(得分:0)

看起来你的数据有点误。在

的情况下
 13       CPID_TYPE         ORG

可以更改为

 12       CPID_TYPE         ORG

结果查询将如Mahmoud Gamal所述:

SELECT *
FROM tablename AS t
PIVOT
(
   MAX(Value)
   FOR FIELDPID IN([COMPANY_NAME],
                    [CP_ID],
                    [CPID_TYPE])
) AS p

结果将是正确的。可以在此处找到PIVOT的其他信息:http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx