0

我有一个旧表,其中包含“主”记录和相关的详细记录。详细记录由“-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' 无效”

我在这里想念什么?

4

2 回答 2

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
于 2012-05-22T14:09:20.417 回答
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 + '-%'
  )
于 2012-05-22T14:15:10.610 回答