在MS Sql Server 2005中计数/选择查询

时间:2012-05-22 14:06:14

标签: sql sql-server sql-server-2005

我有一个包含“主”记录和相关详细记录的遗留表。通过添加主键“-nnn”来标识详细记录。我需要找到没有详细记录的主记录,尝试了几种变体,然后最终将其分解为最简单的元素。

这有效:

select (select count(*) from dbo.client as cl2 
    where cl2.acct_no like (cl1.acct_no + '-%')) as countx, acct_no 
from dbo.client as cl1

并显示预期的零或非零结果,具体取决于有多少详细记录。

但是,当我尝试使用计数结果只选择零详细记录的记录时,如下所示:

select (select count(*) from dbo.client as cl2 
    where cl2.acct_no like (cl1.acct_no + '-%')) as countx, acct_no 
from dbo.client as cl1 
where countx = 0

我收到错误:“无效的列名'countx'”

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

CountX不是命名列。

这可能不是最佳方式,但包装整个查询可能有效。

SELECT CountX, Acct_No
FROM
(
    select (select count(*) from dbo.client as cl2 
        where cl2.acct_no like (cl1.acct_no + '-%')) as countx, acct_no 
    from dbo.client as cli
) As InnerQuery
where countx = 0

编辑

考虑到这一点,使用Join可能会更好地完成,而不是嵌套的Select。

SELECT     cl1.acct_no, Count(*)
FROM       dbo.client cl1 --the master key numbers
INNER JOIN dbo.client cl2 --the sub-keys
           ON cl1.acct_no NOT LIKE '%-%' --No dashes in the MasterKey
           AND cl1.acct_no LIKE (cl2.acct_no + '-%')
GROUP BY   cl1.acct_no

答案 1 :(得分:0)

尝试使用in来获得您想要的内容

 select Acct_No from dbo.client where Acct_No not in 
  (
    select acct_no from dbo.client where acct_no like acct_no + '-%'
  )