我已经研究和发现像我这里的问题这里的问题/答案,但没有我能找到完全适合。SQL - GROUP BY&HAVING COUNT问题
SELECTING with multiple WHERE conditions on same column ---此链接非常接近,但仍然不适合我的问题。
问题: 我有房子付款方式和付款状况的表(空白状态OK)
SEL_PRO_PMTMETHOD_PK SEL_PROFILE_DETAIL_FK PMT_TYPE PMT_STATUS
43827 342997 EFT G
43828 342997 EFT P
43829 342997 RCC
43826 342997 EFT
43776 342922 EFT
43777 342922 EFT G
43778 342922 EFT P
我需要开发由SEL_PROFILE_DETAIL_FK唯一的输出取决于它是否有ONLY EFT的条目,ONLY RCC条目或EFT和RCC条目。
我想通了,只EFT和ONLY RCC
简单的东西,但我需要能够告诉如果有在FK分组BOTH EFT和RCC项目。
我迄今为止代码:
SELECT pmt_type
FROM sel_pro_pmtmethod
WHERE sel_profile_detail_fk = '342997'
AND pmt_type IN ('EFT', 'RCC')
GROUP BY pmt_type
HAVING COUNT(distinct pmt_type) >= 1
此代码返回回pmt_type上面两组数据。无论它有EFT和RCC还是EFT都没关系。
我已经改变了HAVING子句COUNT为“= 2”,但不返回任何内容,因为农村信用社的数量= 1和EFT的= 3
但我需要的是这个WHERE/GROUP BY /如果在分组中存在EFT和RCC条目,则HAVING情况为真。如果有人失踪,则失败。
'HAVING COUNT(不同的pmt_type)= 2'来产生你想要的结果,因为“DISTINCT”只会计算每个值的出现次数,因此它只会计算一次“EFT”和“RCC”一次。哦,'GROUP BY SEL_PROFILE_DETAIL_FK'不是'pmt_type' – Matt
看起来你在使用HAVING COUNT = 2时是关闭的,那部分你可以改成一个简单的查询但只有2列SEL_PROFILE_DETAIL_FK和PMT_TYPE。按SEL_PROFILE_DETAIL_FK分组,但在where子句中放入pmt_type IN('EFT','RCC')。没有必要。将其用作子查询并使用其SEL_PROFILE_DETAIL_FK附加/加入任何查询 – Girish
电子转帐和RCC是仅限**付款类型吗?如果可能有两种以上的付款类型,而您只对这两种付款感兴趣,则可以修改迄今为止提供的两个答案(如果只能有两种付款方式,这两种付款方式都是正确的) - HAVING子句可以更改为某种(如pmt_type ='EFT',则'x'结束)> 0并计数(当pmt_type ='RCC'时,则'x'结束)> 0'。 – mathguy