SQL服务器如何枢轴联合查询
SQL Server how to pivot joint query
我有一个查询 运行 来自不同 table 的连接:
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 名称移动到我的第 3 列,如下所示:
client_fullname | plan_id | joint_name
venus | 992 | Ric
只需要显示j1。
试图阅读枢轴示例但有点卡在这里
尝试这样的事情
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;
我有一个查询 运行 来自不同 table 的连接:
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 名称移动到我的第 3 列,如下所示:
client_fullname | plan_id | joint_name
venus | 992 | Ric
只需要显示j1。
试图阅读枢轴示例但有点卡在这里
尝试这样的事情
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;