试图找到进行此操作的最佳方法,出于某种原因,这确实让我感到困惑。

我有这样的数据:

transaction_id(pk)  decision_id(pk)   accepted_ind
A                    1                NULL
A                    2                <blank>
A                    4                Y
B                    1                <blank>
B                    2                Y
C                    1                Y
D                    1                N
D                    2                O
D                    3                Y
  • 每笔交易都保证有决策 1
  • 可以有多种决策可能性(假设)类型的场景
  • Accepted 可以有多个值或为空或NULL,但只能接受一个值_ind = Y

  • 我正在尝试将查询写入:
  • 为每个 transaction_id 返回一行
  • 返回decision_id,其中accepted_ind = Y 或如果事务没有行accepted_ind = Y,则返回decision_id = 1 的行(无论accepted_ind 中的值如何)

  • 我试过了:
    1.使用逻辑“或”来拉记录,不断得到重复。
    2. 使用联合和除了但不能完全正确地降低逻辑。

    任何帮助表示赞赏。我不知道为什么这让我如此受挫!

    亚当

    最佳答案

    试试这个。基本上 WHERE 子句说:

    接受的地方 = 'Y'
    或者
    此交易没有接受的行,并且 decision_id = 1

    SELECT Transaction_id, Decision_ID, Accepted_id
    FROM MyTable t
    WHERE Accepted_ind = 'Y'
    OR (NOT EXISTS (SELECT 1 FROM MyTable t2
                    WHERE Accepted_ind = 'Y'
                    and t2.Transaction_id = t.transaction_id)
        AND Decision_id = 1)
    

    关于sql - 卡在这个工会/除了,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7675681/

    10-10 03:55