我有类似的查询:
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
与其关联的CSV_PRC_CD
超过1 {{1}}的任何内容。
答案 0 :(得分:1)
我认为最简单的查询是:
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
子句,可以稍微提高效率:
having min(csv.CSV_PRC_CD) = max(csv.CSV_PRC_CD)
count(distinct)
通常比min()
和max()
更加耗费资源。
答案 1 :(得分: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,但如果您的Claim表中有多条记录,那么您可以将其添加回来。