SQL - 嵌套在带有Count的From子句中选择

时间:2016-08-23 17:51:31

标签: sql sql-server-2008

当我使用下面的代码时(它来自Oracle人员,并且他说没有理由不能工作......)我被告知最后的语法不正确')& #39 ;.任何想法我怎么能改变这个" SQL适当"?我的想法是它不喜欢最后一个选择语句。

select 
    * 
from 
    CPINInvest 
where 
    [Case ID||] not in 
        (
        select [Case ID||] 
        from 
            (
            select [Case ID||], count(*) 
            from CPINComm140 
            where [Role CD||]='PRI||' 
            group by [Case ID||]   
            having count(*)=1
            )
        )

3 个答案:

答案 0 :(得分:0)

可以缩短。

select * from CPINInvest 
where [Case ID||] not in (
        select [Case ID||]
        from CPINComm140 
        where [Role CD||]='PRI||' 
        group by [Case ID||] 
        having count(*)=1
    );

但严重的是,管道在字段中?育!

原始查询失败的原因是:
1)count(*)需要别名。例如[total]
2)tsql有一个奇怪的要求,即某些子查询需要别名

答案 1 :(得分:0)

sql喜欢你为你的子查询提供别名,即使它们没有被使用。这可行,但@LukStorms更短的版本更好。

select * 
from CPINInvest 
where 
    [Case ID||] not in 
        (
        select [Case ID||] 
        from 
            (
            select [Case ID||], count(*) 
            from CPINComm140 
            where [Role CD||]='PRI||' 
            group by [Case ID||]   
            having count(*)=1
            ) x
        ) y

答案 2 :(得分:0)

使用以下查询。您忘记在子表中添加别名。

select 
    * 
from 
    CPINInvest 
where 
    [Case ID||] not in 
        (
        select [Case ID||] 
        from 
            (
            select [Case ID||], count(*) 
            from CPINComm140 
            where [Role CD||]='PRI||' 
            group by [Case ID||]   
            having count(*)=1
            )t
        )