2012-05-22 45 views
0

我有一個包含'主'記錄和相關詳細記錄的遺留表。詳細記錄通過添加到「-nnn」主密鑰來標識。我需要找到沒有詳細記錄的主記錄,嘗試了幾種變化,然後最終將其分解爲最簡單的元素。在MS Sql Server 2005中計數/選擇查詢

這工作:

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'」

我在這裏錯過了什麼?

+0

你不能使用列別名WHERE子句。這是錯誤。 – Rahul

回答

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 

編輯

望着這一點,可以使用加入更好實現,而不是該嵌套選擇。

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 
+0

嗯...所以我可以使用列名稱,但不是在where子句中的列別名?您的查詢一旦在第二個'從'中將'cli'更改爲'cl1'這讓我開始了我真正的問題。 – JESii

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 + '-%' 
)