2013-02-22 95 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任何更长的时间,但如果你在你的索求表具有多条记录,然后,你可以添加它。