简体   繁体   中英

SQL Query - More options and suggestions apart from pivoting

New to SQL please dont mind if this is a silly question.. My table looks like this

在此处输入图片说明

I want to send only one email to manager telling him that these employees in your group failed to fill timesheet. currently i have pivoted the above table that looks like this and sending emails by concatinating firstemp+secondemp+thirdemp+------ can this be done in any more easiest way..? 在此处输入图片说明

You can use CONCAT() function to retrieve a single row data in one column

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

CONCAT() replaces NULL values with an empty string.

Please don't pivot, as the concat is really ugly to maintain (and will break if a more capable manager pops up with more subordinates than your concat columns).

The syntax depends on what SQL server you use. For example, in MSSQL you could do this:

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

This result has only 1 row per manager and fixed number of columns regardless how many subordinates the manager has:

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

Play with the example here: http://sqlfiddle.com/#!18/73bb5/5

Another option is just query relevant data to application layer and do the grouping there.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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