2014-04-09 35 views
1

enter image description hereSQL查詢過濾不給我正確的結果

我有上表中,我試圖運行一個查詢,其中,我想告訴所有的記錄,其中MSTRNMBR(第二場)有不止一個唯一的客戶。

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

我想用下面的查詢,但我做錯了什麼。任何人都可以請建議如何獲得以上結果我期待。

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

基本上我不想在custnmbr上組,但只在MSTRNMBR字段。

對不起,如果這是一個基本的問題。

回答

2

這裏是查詢讓所有MSTRNUMB有兩個以上不同的CUSTNMBR並同時獲得一個逗號所有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 
) 
+0

我看不到第二列,我猜是你查詢中的custnmbr。我應該做些什麼才能顯示custnmbr。當前查詢得到執行,查詢輸出中的第二列(這是custnmbr)就像這麼長,我甚至不能擴展它。 sop30200表擁有多達100萬條記錄。 – Anirudh

+0

您是否試圖檢索與此類MSTRNUMB關聯的所有CUSTNMBR?如果有,請參閱更新後的查詢。 – Abhi

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 
+0

我運行了您的查詢,並在原始問題中顯示了我的表格數據快照中的97870和97871。所以只能顯示97869。我猜查詢顯示爲custnmbr> 1,但只有當同一個mstrnmbr有多個客戶時才顯示。請告訴我。 – Anirudh