同一个表

时间:2015-06-17 17:54:47

标签: mysql oracle

我在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.这是否可以使用嵌套查询或自联接?

4 个答案:

答案 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)

问题似乎在于:

  • 对于给定ID'的任何给定行例如7890:
  • 1)必须有一行J_CODE以' C'
  • 开头
  • 2)不得有另一行J_CODE以' A'
  • 开头

这表示属于的所有行,例如必须检查1234。

在提供的测试数据中:

  • 群组 1234有1行以' C'还有一个以' A'开头的单独行。
  • 群组 7890有一行以' C'并且没有的行以' A'开头。

必需:

  • Group 1234 无效'因为它包含一个' A'行。
  • 群组7890 有效'因为它不会包含一个' A'行。

有一个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