我有两张桌子"一对多":
表格1
ID Name
1 Abe
2 David
3 Orly
Run Code Online (Sandbox Code Playgroud)
表2
ID email
1 a@zz.com
1 ab@zz.com
1 abe@zz.com
2 dav@zz.com
2 d@zz.com
3 orly@zz.com
3 o@zz.com
Run Code Online (Sandbox Code Playgroud)
我需要这样的输出:
1 Abe a@zz.com, ab@zz.com, abe@zz.com
2 David dav@zz.com, d@zz.com
3 Orly orly@zz.com, o@zz.com
Run Code Online (Sandbox Code Playgroud)
我知道这不起作用,因为内部SELECT不是单个字符串:
SELECT
ID, Name,
(SELECT email FROM Table2 WHERE Table2.ID = Table1.ID) AS emails
FROM Table1
Run Code Online (Sandbox Code Playgroud)
我试着申请:
DECLARE @emails VARCHAR(999)
SELECT [ID],[Name],
(SELECT @emails = COALESCE(@emails + ', ', '') + [email]
FROM Table2) AS 'emails'
FROM Table1
Run Code Online (Sandbox Code Playgroud)
但没有运气.
该如何解决?
谢谢.
Jon*_*ton 28
实现这一目标的最佳方法之一是将For XML Path和STUFF组合如下:
SELECT
ID, Name,
Emails = STUFF((
SELECT ', ' + Email FROM Table2 WHERE Table2.ID = Table1.ID
FOR XML PATH ('')),1,2,'')
FROM Table1
Run Code Online (Sandbox Code Playgroud)
SELECT *
FROM Table1 a
CROSS APPLY --or OUTER APPLY
(
SELECT SUBSTRING(
(SELECT ','+b.Email
FROM Table2 b
WHERE a.ID = b.ID
FOR XML PATH(''))
,2
,4000) GroupConcat
) x
Run Code Online (Sandbox Code Playgroud)
结果:
ID Name GroupConcat
-- ----- -----------------------------
1 Abe a@zz.com,ab@zz.com,abe@zz.com
2 David dav@zz.com,d@zz.com
3 Orly orly@zz.com,o@zz.com
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35115 次 |
| 最近记录: |