我在oracle中有一个表,其中包含ID和J_Code
等列ID J_Code
---------------------------------------------
1234 C1234
1234 FGH89
1234 BNMG9
1234 AIOBN
7890 CVBN0
7890 FGHJK
7896 LKJHIN
我需要编写一个sql查询,它会返回我的计数,其中J_code以C开头但不包含给定ID的A.在运行时,我们将传递ID。因此,当ID = 1234时,计数应该为0,因为我们有“AIOBN'那里。但是当我通过7890时,计数应该是1.这是否可以使用嵌套查询或自联接?
答案 0 :(得分:1)
使用以下内容:
SELECT count(*) FROM your_table WHERE J_Code NOT LIKE 'a%' AND ID = your_id
答案 1 :(得分:0)
抱歉,不了解oracle语法,根据SQL Server,查询可能是: -
Select t.id
,Sum(Case When t.j_code like 'c%' Then 1 Else 0 End) As cCount
From table As t
Group By t.id
Having Sum(Case When t.j_code like 'a%' Then 1 Else 0 End) = 0
And Sum(Case When t.j_code like 'c%' Then 1 Else 0 End) > 0
答案 2 :(得分:0)
问题似乎在于:
这表示属于组的所有行,例如必须检查1234。
在提供的测试数据中:
必需:
有一个SQLFiddle
我选择使用相关的'子查询检查是否存在' A'记录。
我使用' mysql'但它是标准的SQL,所以应该在任何地方工作。
代码:
/* http://sqlfiddle.com/#!9/8ff9bb/1 */
SET @whichId = 7890;
SELECT COUNT(*)
FROM Q3089887 `JCode_C`
WHERE
`JCode_C`.`ID` = @whichId
AND `JCode_C`.`J_Code` LIKE 'C%'
AND NOT EXISTS (SELECT 1
FROM Q3089887 `JCode_A`
WHERE `JCode_A`.`ID` = `JCode_C`.`ID`
AND `JCode_A`.`J_Code` LIKE 'A%'
)
答案 3 :(得分:-1)
尝试此查询
select Count(id)
from table1
where j_code like 'c%'
and id not in(select id from table1 where j_code like 'a%' )
and id=1234