我有以下数据:
ID_OWN ID_PET KEY NAME
123 1 11 JOY
123 1 11 JOY
123 2 12 JOY
123 2 12 JOY
456 1 13 HELLO
456 1 13 MAMA
456 2 14 HELLO
456 2 14 MAMA
场景是:
如果我选择DISTINCT, ID_OWN 123 将返回2行数据。
但是对于 ID_OWN 456 ,它仍然会返回4行数据,因为 NAME 列具有所有不同的值。
我想要的是,如果 NAME 在相同的 ID_OWN 下具有不同的值,那么我希望将这些 NAME 值粘贴在一起,因此它也将返回2行数据(或基于同一 ID_OWN 下的 ID_PET 的数量的N行数据,在这种情况下,分别为1和2)
以下是预期的返回数据:
ID_OWN ID_PET KEY NAME
123 1 11 JOY
123 2 12 JOY
456 1 13 HELLO MAMA
456 2 14 HELLO MAMA
答案 0 :(得分:0)
结合使用XML和东西
select distinct ID_OWN , ID_PET, [KEY],
STUFF((Select ' '+ NAME
from yourtable T1
where T1.ID_OWN =T2.ID_OWN and T1.ID_PET =T2.ID_PET and T1.[KEY] =T2.[KEY]
FOR XML PATH('')),1,1,'') as stickedName from yourtable T2
输出为:
ID_OWN ID_PET KEY stickedName
123 1 11 JOY
123 2 12 JOY
456 1 13 HELLO,MAMA
456 2 14 HELLO,MAMA
答案 1 :(得分:0)
在SQL Server中,您可以通过demo on db<>fiddle
这样的方式来实现;WITH cte_TempTable AS (
SELECT DISTINCT ID_OWN, ID_PET, Key_Number, Name
FROM TempTable
)
SELECT DISTINCT ID_OWN, ID_PET, Key_Number, SUBSTRING(
(
SELECT ' ' + Name
FROM cte_TempTable C1
WHERE C1.ID_OWN = C2.ID_OWN AND C1.ID_PET = C2.ID_PET AND C1.Key_Number = C2.Key_Number
FOR XML PATH ('')
), 2, 1000) AS "nAME"
FROM cte_TempTable C2
输出
ID_OWN ID_PET Key_Number nAME
123 1 11 JOY
123 2 12 JOY
456 1 13 HELLO MAMA
456 2 14 HELLO MAMA
答案 2 :(得分:0)
如果是MySQL,则可以按以下方式使用GROUP_CONCAT-
SELECT ID_OWN,ID_PET,`Key`, group_CONCAT(NAME)
FROM (
SELECT DISTINCT ID_OWN,ID_PET,`Key`, NAME FROM your_table
)A
GROUP BY ID_OWN,ID_PET,`Key`