0

ヘッダーと行の詳細テーブルがあります。そのような;

ヘッダー テーブル:TRANSACTIONS 行詳細テーブル:TRANSACTIONS_LINE_DETAIL

TRANSACTIONS テーブル: SQ_TRANSACTION_ID、CH_TRANSACTION_NAME、..列が含まれます。

TRANSACTIONS_LINE_DETAIL テーブル: SQ_TRANSACTION_LINE_DETAIL_ID、RF_TRANSACTION_ID、CH_LINE_CODE、..列が含まれます。

TRANSACTIONS_LINE_DETAIL テーブルは、TRANSACTIONS テーブルに保持された各トランザクションに対して 1 つ以上の詳細行を保持します。

だから私の問題は次のとおりです。

X、Y、Z の行コードを一緒に持つトランザクションを取得するクエリを書きたいと思います。(CH_LINE_CODE)。

私はこのように書きました。

SELECT DISTINCT 
   TR.RF_TRANSACTION_ID
FROM
   TRANSACTIONS_LINE_DETAIL TR
WHERE
   TR.CH_LINE_CODE IN ('X','Y','Z')

しかし、このコードは、「Y」、「X」、または「Z」を持たないトランザクションを返す可能性があります。つまり、トランザクションにすべての回線コードを含める必要があります。

可能性のあるトランザクションを取得するクエリが必要です

X、Y、Z

また

A、B、C、X、Y、Z

また

X、Y、Z、P

しかし、そうではありません

バツ

また

X、Y

また

Z、Y、A、B

.

4

2 に答える 2

2

これは役に立つかもしれません。これがSQL Fiddleです。

SELECT rf_transaction_id
  FROM transactions_line_detail
 WHERE ch_line_code IN ('X', 'Y', 'Z')
 GROUP BY rf_transaction_id
HAVING COUNT(1) = 3
于 2013-08-28T12:58:31.997 に答える
1

これを試して

Select * From TRANSACTIONS_LINE_DETAIL td
Where 
  Exists 
    ( Select 1 From TRANSACTIONS_LINE_DETAIL td2
      Where td2.RF_TRANSACTION_ID = td.RF_TRANSACTION_ID
        And td2.CH_LINE_CODE = 'X'
    )
  And 
  Exists 
    ( Select 1 From TRANSACTIONS_LINE_DETAIL td2
      Where td2.RF_TRANSACTION_ID = td.RF_TRANSACTION_ID
        And td2.CH_LINE_CODE = 'Y'
    )
  And 
  Exists 
    ( Select 1 From TRANSACTIONS_LINE_DETAIL td2
      Where td2.RF_TRANSACTION_ID = td.RF_TRANSACTION_ID
        And td2.CH_LINE_CODE = 'Z'
    )
于 2013-08-28T11:21:20.237 に答える