Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQL Server如何透视联合查询_Sql Server 2008_Pivot - Fatal编程技术网

Sql server 2008 SQL Server如何透视联合查询

Sql server 2008 SQL Server如何透视联合查询,sql-server-2008,pivot,Sql Server 2008,Pivot,我有一个从不同表运行联接的查询: select b.first_name, d.client_fullname, a.plan_id, c.joint_info from PLAN_INFO a inner join JHI_USER b on a.created_by = b.login left join PLAN_INFO_CLIENT c on c.plan_id = a.plan_id and

我有一个从不同表运行联接的查询:

select 
    b.first_name, d.client_fullname, a.plan_id, c.joint_info 
from 
    PLAN_INFO a 
inner join 
    JHI_USER b on a.created_by = b.login 
left join 
    PLAN_INFO_CLIENT c on c.plan_id = a.plan_id
                       and c.plan_id is not null
left join 
    CLIENT d on d.client_id = c.client_id
left join 
    CLIENT_ADDRESS_DET e on e.client_id = d.client_id 
order by 
    a.plan_id ASC
这就是结果

client_fullname | plan_id | joint_info
----------------+---------+------------
venus           | 992     | M
Ric             | 992     | J1
Ricardo         | 992     | J2
Hisa            | 992     | J3
M是主接头,J1是接头一,J2是接头二,该记录用于接头账户,以使其更加清晰

我需要将我的J2名称移动到第三列,如下所示:

    client_fullname | plan_id | joint_name
    venus           | 992     | Ric
只需显示j1


尝试阅读pivot示例,但有点卡在这里

WITH CTE AS (

    select b.first_name,d.client_fullname,a.plan_id,
     c.joint_info 
    from PLAN_INFO a 
    inner join JHI_USER b on  a.created_by = b.login
    left join PLAN_INFO_CLIENT c
    on c.plan_id =a.plan_id
    and c.plan_id is not null
    left join CLIENT d 
    on d.client_id =c.client_id
    left join CLIENT_ADDRESS_DET e
    on e.client_id = d.client_id 
    order by a.plan_id ASC
    )

    select client_fullname,plan_id,
    (select client_fullname  from cte b where a.plan_id=b.plan_id and 
    b.joint_info='J1') as joint_name  
    from cte a 
    where joint_info='M'

您可以为此使用条件聚合

SELECT MAX(CASE
               WHEN c.joint_info = 'M'
               THEN d.client_fullname
           END) AS client_fullname,
       a.plan_id,
       MAX(CASE
               WHEN c.joint_info = 'J1'
               THEN d.client_fullname
           END) AS joint_name
FROM   PLAN_INFO a
       INNER JOIN JHI_USER b ON a.created_by = b.login
       LEFT JOIN PLAN_INFO_CLIENT c ON c.plan_id = a.plan_id
                                       AND c.plan_id IS NOT NULL
       LEFT JOIN CLIENT d ON d.client_id = c.client_id
       LEFT JOIN CLIENT_ADDRESS_DET e ON e.client_id = d.client_id
GROUP BY a.plan_id
ORDER BY a.plan_id ASC;

我删除了CTE中的order by子句,然后它抛出sql错误子查询返回了超过1个值。这个查询对我来说很好,谢谢,先生,还有更多的列要去lol。。我非常感谢你的洞察力