我有2张表格如下
---------------------------------
| PId | uniid |
|-----|------------------------ |
| 1 | xxxggsgsg |
| 3 | xxxxxggsgs |
| 4 | xxxxxggsgsg |
| 5 | gfgjsfgjf |
| 6 | gsgjsfgjf |
| 7 | gfgjsfgjf |
----------------------------------
---------------------------------------
| PId | email |
|-----|-------------------------------|
| 4 | sss@g.com |
| 6 | 123@y.com |
| 7 | kkk@k.com |
| 9 | 454@h.com |
| 1 | sss@g.com |
| 22 | kkk@k.com |
| 1 | sss@g.com |
---------------------------------------
我想在两个表中显示匹配的id的uniid,我的查询是
select email,count(email) as EmailCount , (STUFF((SELECT CAST(', ' + t1.uniid AS VARCHAR(MAX))
FROM t1
join t2
on t1.PId = t2.PId
group by t1.uniid
FOR XML PATH ('')), 1, 2, '')) AS uni
from t1
inner join t2
on t1.PId = t2.PId
group by email
我的输出是
+------------------------------------------------------------------------------------------------------+
| email | EmailCount | uniid |
--------------------------------------------------------------------------------------------------------
| 123@y.com | 1 | gfgjsfgjf , gsgjsfgjf , xxxxxggsgsg |
--------------------------------------------------------------------------------------------------------
|kkk@k.com | 1 | gfgjsfgjf , gsgjsfgjf , xxxxxggsgsg |
-------------------------------------------------------------------------------------------------------
|sss@g.com |3 | gfgjsfgjf , gsgjsfgjf , xxxxxggsgsg |
+-----------------------------------------------------------------------------------------------------+
这里的列显示3,即使当计数为偶数时3列为单位。 如何才能显示匹配的pid的uniid。 我的sql小提琴是Sample DB
答案 0 :(得分:2)
您可以先使用CTE
进行连接,然后在主查询中使用相关子查询生成逗号分隔列表:
WITH cte AS
(
SELECT email, uniid
FROM #t1 t1
JOIN #t2 t2
ON t1.PId = t2.PId
)
SELECT DISTINCT email,
[EmailCount] = COUNT(*) OVER (PARTITION BY email),
[skus] = (STUFF((SELECT CAST(', ' + uniid AS VARCHAR(MAX))
FROM cte c2
WHERE c2.email = c1.email
FOR XML PATH ('')), 1, 2, ''))
FROM cte c1;
的 LiveDemo
强>
输出:
╔═══════════╦════════════╦══════════════════════════════════════════╗
║ Email ║ EmailCount ║ Skus ║
╠═══════════╬════════════╬══════════════════════════════════════════╣
║ 123@y.com ║ 1 ║ gsgjsfgjf ║
║ kkk@k.com ║ 1 ║ gfgjsfgjf ║
║ sss@g.com ║ 3 ║ xxxxxggsgsg , xxxxxggsgsg , xxxxxggsgsg ║
╚═══════════╩════════════╩══════════════════════════════════════════╝