Sql Query过滤没有给我正确的结果

时间:2014-04-09 17:33:36

标签: sql-server-2008 sql-server-2008-r2 group-by duplicates

enter image description here

我有上表,我正在尝试运行一个查询,其中我想显示MSTRNMBR(第二个字段)有多个唯一客户的所有记录。

所以在上面的快照中,只有MstrNmbr =' 97869'有两个不同的custNmbr。

我正在尝试使用以下查询,但我做错了。任何人都可以建议如何获得我正在寻找的结果。

    SELECT MSTRNUMB,SUM(1),CUSTNMBR
    FROM SOP30200
    WHERE 2 >= 2 group by MSTRNUMB,CUSTNMBR

基本上我不想在custnmbr上分组,但仅限于MSTRNMBR字段。

很抱歉,如果这是一个基本问题。

2 个答案:

答案 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 BYHAVING

    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