繁体   English   中英

SQL:从同一表中选择列

[英]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

SqlFiddle演示

这是你想要的?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM