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 表连接起来。从 Accounts 表中选择您的 Account#,并从您的 transactions 表中选择您的剩余字段。这将为每个账户生成记录,但对于那些没有相应交易的账户则为空数据。

于 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 回答