[英]SQL SELECT generate additional column from same table with special condition
[英]SQL: select column from same table
如何从数据库中选择以将此新表显示到页面中。 我只是从同一张桌子中选择。 有人可以帮忙吗?
Id | Username | UserType | SpecialId
-------------------------------------
1 | jdoe | Type_A | SP_1
2 | dmatt | Type_A | SP_2
3 | kwill | Type_A | SP_3
4 | kwill_a | Type_B | SP_3
5 | dmatt_a | Type_B | SP_2
6 | dmatt_b | Type_B | SP_2
No | Type_A Username | Type_B Username
-------------------------------------
1 | jdoe | -
2 | dmatt | dmatt_a, dmatt_b
3 | kwill | kwill_a
我认为您可能想这样做(看起来像一个数据透视表问题):
select
replace(SpecialId, 'SP_', '') as No,
max(case when UserType = 'Type_A' then UserName else '-' end) as Type_A_UserName,
max(case when UserType = 'Type_B' then UserName else '-' end) as Type_B_UserName
from (
select `UserType`, `SpecialId`, group_concat(UserName) as UserName
from yourtable
group by `UserType`, `SpecialId`) t
group by SpecialId
这是你想要的?
SELECT a.id, a.username, GROUP_CONCAT(b.username)
FROM (SELECT * FROM mytable WHERE usertype='Type_A') AS a
LEFT JOIN (SELECT * FROM mytable WHERE usertype='Type_B') AS b
ON a.specialid = b.specialid
通过将子查询与自连接结合起来,可以达到目的。
SELECT
ifnull(tabA.UsernameA, '-') AS UsernameA,
ifnull(tabB.UsernameB, '-') AS UsernameB
FROM (
SELECT SpecialId, group_concat(Username) AS UsernameA
FROM tab
WHERE UserType = 'Type_A'
GROUP BY 1
) AS tabA
OUTER JOIN (
SELECT SpecialId, group_concat(Username) AS UsernameB
FROM tab
WHERE UserType = 'Type_B'
GROUP BY 1
) AS tabB ON tabA.SpecialId = tabB.SpecialId
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.