2013-02-22 87 views
0

我有一個類似的查詢:返回行數= 1

select 
    clm.CLM_ID, 
    csv.CSV_PRC_CD 
FROM 
    CLM_CLAIM clm inner join CSV_CLM_SRV csv on clm.CLM_iD = csv.CSV_CLM_ID 
GROUP BY 
    clm.CLM_ID, 
    csv.CSV_PRC_CD 

我的結果是這個樣子:

CLM_ID  CSV_PRC_CD  
----------- --------------- 
     5087 0270   
     5087 0305   
     5087 0351   
     5087 0637   
     5087 0730   
    365294 99221   
    406116 0250   
    406116 0300   
    406116 0450   
    523504 99202   
    602677 73080   
    602677 73100   
    901343 97002   
    901343 97014   
    1040368 00190   
    1250851 93306 

我試圖完成僅返回只有一個與CLM_ID關聯的CSV_PRC_CD的行。所以我的結果應該是這樣的:

CLM_ID CSV_PRC_CD


365294 99221   
523504 99202   
1040368 00190   
1250851 93306 

凡是在CLM_ID具有與之相關超過1 CSV_PRC_CD應該從我的結果被省略。

+0

tsql或db2?這是什麼? – JohnFx 2013-02-22 19:20:44

+0

db2。標籤已被編輯。 – etm124 2013-02-22 19:21:44

回答

1

我認爲最簡單的查詢是:

having min(csv.CSV_PRC_CD) = max(csv.CSV_PRC_CD) 

count(distinct)通常是多一點資源比min()密集型:

select clm.CLM_ID, MIN(csv.CSV_PRC_CD) as CSV_PRC_CD 
FROM CLM_CLAIM clm inner join CSV_CLM_SRV csv on clm.CLM_iD = csv.CSV_CLM_ID 
GROUP BY clm.CLM_ID 
having COUNT(distinct csv.CSV_PRC_CD) = 1 

這可以稍微更有效的使用以下having條款,而不是由和max()

0

一種方式做到這一點是使用COUNT(*) = 1本身加入:

SELECT 
    clm.CLM_ID, 
    csv.CSV_PRC_CD 
FROM 
    CLM_CLAIM clm 
     INNER JOIN CSV_CLM_SRV csv on clm.CLM_iD = csv.CSV_CLM_ID 
     INNER JOIN (
       SELECT CSV_CLM_ID 
       FROM CSV_CLM_SRV 
       GROUP BY CSV_CLM_ID 
       HAVING COUNT(*) = 1) T 
      ON T.CSV_CLM_ID = csv.CSV_CLM_ID 

我不認爲你需要保持GROUP BY任何更長的時間,但如果你在你的索求表具有多條記錄,然後,你可以添加它。