我有上表,我正在尝试运行一个查询,其中我想显示MSTRNMBR(第二个字段)有多个唯一客户的所有记录。
所以在上面的快照中,只有MstrNmbr =' 97869'有两个不同的custNmbr。
我正在尝试使用以下查询,但我做错了。任何人都可以建议如何获得我正在寻找的结果。
SELECT MSTRNUMB,SUM(1),CUSTNMBR
FROM SOP30200
WHERE 2 >= 2 group by MSTRNUMB,CUSTNMBR
基本上我不想在custnmbr上分组,但仅限于MSTRNMBR字段。
很抱歉,如果这是一个基本问题。
答案 0 :(得分:2)
以下是查询以获取具有两个以上不同CUSTNMBR的所有MSTRNUMB,并且还获得所有CUSTNMBR的逗号分隔列表
Select MSTRNUMB,
STUFF(
(SELECT ',' + CUSTNMBR FROM SOP30200
FOR XML PATH('')),
1, 1, '') AS Output
from SOP30200
group by MSTRNUMB
HAVING COUNT(DISTINCT CUSTNMBR) > 1
如果你想查看与这样的MSTRNUMB相关的所有CUSTNMBR,那么你可以使用下面的sql
SELECT *
FROM SOP30200
WHERE MSTRNUMB IN (
SELECT MSTRNUMB
FROM SOP30200
group by MSTRNUMB
HAVING COUNT(DISTINCT CUSTNMBR) > 1
)
答案 1 :(得分:1)
使用GROUP BY
和HAVING
SELECT MstrNumbr, count(MstrNumbr) as DistinctCustomerCount
FROM
(
SELECT DISTINCT MstrNumbr, CustNmbr
FROM SOP30200
) a
GROUP BY MstrNumb
编辑:已更新。上面的查询只会给你一个与多个CustNmbr关联的MstrNumbers,下面的那个也会给你一个不同客户的列表(对于尾随的逗号很抱歉)
SELECT MstrNumbr
,(SELECT DISTINCT CustNmbr + ','
FROM SOP30200 s1
WHERE s1.MstrNumbr = s2.MstrNumbr
FOR XML PATH(''), type).value('.', 'varchar(max)') as Customers
FROM SOP30200 s2
GROUP BY MstrNumbr
HAVING COUNT(MstrNumbr) > 1