What i have tried Results wanted like this在一个表格中,对于每个ID,根据某些条件Ex可以有多个电子邮件ID。
ID EmailID's
1 Mike.Foster@Mail.com
1 lilly.Foster@Mail.com
2 Michel.Josh@Mail.com
2 Nash.Ted@Mail.com
我必须从另一个表中的这些ID中获取电子邮件名称,诸如此类
我需要的输出
Email_Name
Foster.Mike,Foster.Lilly
Josh.Michel,Ted.Nash
这是我尝试过的。
SELECT User_Email =
STUFF((SELECT DISTINCT ', ' + User_Email
FROM table1 b
WHERE b.Component_ID= a.Component_ID
and [Role] ='Team Lead' and Functional_Group ='Product'
FOR XML PATH('')), 1, 2, '')
FROM [WFS].table1 a
GROUP BY table1
现在我要使用其他表格的电子邮件名称
Select EmailNamefrom Table2 where EmailIDs IN ( 'code for Email')
表1模式
ID Component_ID EmailIDs Role Functional_Group
1 1 Mike.Foster@Mail.com Team Lead Product
2 1 lilly.Foster@Mail.com Team Lead Product
3 2 Michel.Josh@Mail.com Team Lead Product
4 2 Nash.Ted@Mail.com Team Lead Product
表2架构
ID EmailIDs EmailName
1 Mike.Foster@Mail.com Foster.Mike
2 lilly.Foster@Mail.com Foster.Lilly
欢迎提出任何建议。在此先感谢
答案 0 :(得分:0)
您实际上已经关闭,但是您的SQL与您的架构不匹配。您可以根据自己的喜好进行此操作:
SELECT Email_Name =
STUFF((SELECT DISTINCT ', ' + EmailIDs
FROM table1 b
WHERE b.Component_ID= a.Component_ID
and [Role] ='Team Lead' and Functional_Group ='Product'
FOR XML PATH('')), 1, 2, '')
FROM table1 a
GROUP BY a.Component_ID;
编辑:我不明白您在问什么。可能这就是您的意思吗?
SELECT STUFF((SELECT ', ' + EmailName
FROM Table2 where EmailIDs IN ( SELECT EmailIDs
FROM table1
WHERE [Role] ='Team Lead' and Functional_Group ='Product')
FOR XML PATH('')), 1, 2, '')
或者你的意思是这样
SELECT DISTINCT Component_ID, emailNames
FROM table1
CROSS APPLY (SELECT STUFF((SELECT ', '+t2.EmailName
FROM table2 t2
INNER JOIN TABLE1 t1 ON t1.EmailIDs = t2.EmailIDs
WHERE t1.Component_ID = Table1.Component_ID
FOR XML PATH('')), 1, 2, '')
) t(EmailNames)
WHERE [Role] ='Team Lead' and Functional_Group ='Product'
答案 1 :(得分:0)
忽略此答案,因为我发现GROUP_CONCAT()
是MySQL特定功能 ,这意味着它在SQL Server中不起作用,但是,我'将其保留以备将来参考。
SELECT
GROUP_CONCAT(EmailName SEPARATOR ', ') as name
FROM
table1
INNER JOIN table2 ON table1.EmailIDs=table2.EmailIDs
WHERE
table1.EmailIDs=table2.EmailIDs
GROUP BY
table1.Component_ID
输出:
Foster.Mike,Foster.Lilly
Ted.Nash,Josh.Michel
文档:https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html#function_group-concat
答案 2 :(得分:0)
您需要CTE
和STUFF()
:
WITH t AS (
SELECT t1.*, t2.emailname
FROM table1 t1 INNER JOIN
table2 t2
ON t2.emailids = t1.emailids
)
SELECT id, STUFF ( (SELECT DISTINCT ','+t1.emailname
FROM t t1
WHERE t1.id = t.id
FOR XML PATH ('')
), 1, 1, ''
) AS Email_Name
FROM t
GROUP BY id;