2013-11-04 76 views
1

我列这样枢轴文本列排列

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” 感谢您的帮助 Arun

+0

看看这个链接http://blogs.msdn.com/b/spike/archive/2009/03/03/pivot-tables-in-sql-server- a-simple-sample.aspx – Raphael

+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

+1,以便首先发布正确的答案,并且在问题被问到的3分钟内 –

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

+0

所以不要发布与'Mahmoud Gamal'相同的答案 –

+0

问题是'Arun Kumar' – Sandr

+0

发表的默认数据中有一个错误,在评论中写道 –