SQL查询 - 除了透视之外还有更多选项和建议

时间:2018-02-09 10:48:11

标签: sql

SQL新手请不要介意这是一个愚蠢的问题.. 我的表看起来像这样

enter image description here

我只想向经理发送一封电子邮件,告诉他您小组中的这些员工未能填写时间表。 目前我已经调整了上面的表格,看起来像这样 并通过汇编firstemp + secondemp + thirdemp + ------发送电子邮件 这可以用最简单的方式完成吗? enter image description here

2 个答案:

答案 0 :(得分:0)

您可以使用CONCAT()函数在一列中检索单行数据

SELECT M_EMAIL,
       CONCAT(FIRSTEMP, SECONDEMP, THIRDEMP, FOURTHEMP, FIFTHEMP...)
FROM 'your_table';

CONCAT()用空字符串替换NULL值。

答案 1 :(得分:0)

请不要转动,因为concat真的很难维护(并且如果一个功能更强大的管理员弹出更多的下属而不是你的concat列,将会中断)。

语法取决于您使用的SQL服务器。例如,在MSSQL中你可以这样做:

select manager, m_email, STRING_AGG(employee, ', ') as subordinates
from Employee
group by manager, m_email

无论经理有多少个下属,这个结果每个经理只有一行和固定数量的列:

manager | m_email   | subordinates
----------------------------------
A       | A@A.COM   | b, D
D       | D@D.COM   | e, h
I       | I@I.COM   | j

在此处播放示例:http://sqlfiddle.com/#!18/73bb5/5

另一种选择是向应用层查询相关数据并在那里进行分组。