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

編集

これを見ると、ネストされた Select の代わりに、Join を使用して達成した方が良いかもしれません。

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 に答える