2

いくつかの異なるテーブルに対して最大 1,000 の口座番号を照会する必要があるという要求を受けています。

照会しているテーブルに見つからない口座番号を簡単に特定する方法を探しています。

例えば:

    select
        a.account#
        a.date
        a.amount
    from
        transactiontable as A
    where
        a.account# in ('1','2','3','4')

アカウント番号 3 がこの表にない場合、アカウントはまったく表示されず、結果は次のようになります。

     Account# | Date | Amount
    --------------------------
         1    | 8/31 | $2.50
         2    | 8/31 | $7.25
         4    | 8/31 | $0.63

口座番号が 4 つしかないため、不足している口座番号を簡単に特定できます。1,000 以上の口座番号がある場合、どれが欠けているかを見つけることは、不可能ではないにしても非常に困難です。探していない何万ものレコードが返されるため、「NOT IN」句は使用できません。

すべてのアカウント番号を持つマスター テーブルを使用してさまざまな結合を試みましたが、成功しませんでした。

欠落しているアカウント番号を特定する簡単な方法は SQL Studio にありますか? または、このような結果を得るためにクエリをコーディングする方法はありますか?

     Account# | Date | Amount
    --------------------------
         1    | 8/31 | $2.50
         2    | 8/31 | $7.25
         3    | NULL |  NULL
         4    | 8/31 | $0.63
4

2 に答える 2

3

または、このような結果を取得するためにクエリをコーディングする方法はありますか?

取引テーブルをアカウントテーブルに外部結合します。AccountsテーブルからAccount#を選択し、transactionsテーブルから残りのフィールドを選択します。これにより、すべてのアカウントのレコードが生成されますが、対応するトランザクションがないアカウントのデータはnullになります。

于 2012-11-28T22:28:33.430 に答える
3

このようなものがうまくいくはずです。選択したテキスト エディターを使用して、ステートメントの最初のセクションを作成します。

DECLARE @accountsTable TABLE (AccountId INT)
INSERT INTO @accountsTable VALUES (1)
INSERT INTO @accountsTable VALUES (2)
INSERT INTO @accountsTable VALUES (3)
INSERT INTO @accountsTable VALUES (4)

SELECT  a.AccountId, t.*
FROM    @accountsTable a
        LEFT OUTER JOIN transactionTable t ON a.AccountId = t.AccountId
于 2012-11-28T22:36:06.523 に答える