Return multiple values in one column

后端 未结 2 1574
无人共我
无人共我 2021-01-15 15:28

I have two tables

Employee:

Empid Ename Eage Eadd Ephone
1      x     23   b    677
2      y     24   h    809 
3      z     34   u          


        
2条回答
  •  猫巷女王i
    2021-01-15 15:51

    It certainly would be nice to know the target RDBMS. But this question is asked so often so let's try and list'em all (at least popular ones) side by side.

    For SQL Server:

    SELECT e.Ename, e.Eage, e.Eadd, e.Ephone, d.dname
      FROM Employee e LEFT JOIN 
    (
      SELECT fkEmpid,
             STUFF((SELECT ',' + dname 
                        FROM Department 
                       WHERE fkEmpid = t.fkEmpid 
                         FOR XML PATH('')) , 1 , 1 , '' ) dname
        FROM Department t
       GROUP BY fkEmpid
    ) d
        ON e.Empid = d.fkEmpid
    

    Here is SQLFiddle demo

    For Mysql, SQLite, HSQLDB 2.X:

    SELECT e.Ename, e.Eage, e.Eadd, e.Ephone, d.dname
      FROM Employee e LEFT JOIN 
    (
      SELECT fkEmpid,
             GROUP_CONCAT(dname) dname
        FROM Department t
       GROUP BY fkEmpid
    ) d
        ON e.Empid = d.fkEmpid
    

    Here is SQLFiddle demo (MySql)
    Here is SQLFiddle demo (SQLite)

    For Oracle 11g:

    SELECT e.Ename, e.Eage, e.Eadd, e.Ephone, d.dname
      FROM Employee e LEFT JOIN 
    (
      SELECT fkEmpid,
             LISTAGG (dname, ',') WITHIN GROUP (ORDER BY dname) dname
        FROM Department t
       GROUP BY fkEmpid
    ) d
        ON e.Empid = d.fkEmpid
    

    Here is SQLFiddle demo

    For PostgreSQL 9.X:

    SELECT e.Ename, e.Eage, e.Eadd, e.Ephone, d.dname
      FROM Employee e LEFT JOIN 
    (
      SELECT fkEmpid,
             string_agg(dname, ',') dname
        FROM Department t
       GROUP BY fkEmpid
    ) d
        ON e.Empid = d.fkEmpid
    

    Here is SQLFiddle demo

    Output in all cases:

    | ENAME | EAGE | EADD | EPHONE |      DNAME |
    ---------------------------------------------
    |     x |   23 |    b |    677 | test,test1 |
    |     y |   24 |    h |    809 |      hello |
    |     z |   34 |    u |    799 |     (null) |
    

提交回复
热议问题