2

ジョブに関連するデータを含む 3 つのテーブルがあります。1 つのテーブルはマスター テーブルで、他の 2 つはトランザクション テーブルで、マスターに関連付けられています。

CREATE TABLE Job
(JobNo varchar(10))

CREATE TABLE Trans1
(JobNo varchar(10), TrxDate datetime, TrxStatus int)

CREATE TABLE Trans2
(JobNo varchar(10), TrxDate datetime, TrxStatus int)

テーブルには、Jobジョブごとに常に 1 つの行があります。Trans1ジョブごとにTrans2行がないか、1 つまたは複数の行があります。

TrxStatus特定のジョブについて、特定の日付の列の値を返すクエリを作成できる必要があります。

Trans1持っているとしましょう

Job     TrxDate    TrxStatus
AB123   2/1/2012     10
AB123   3/1/2012     20
AB123   3/31/2021    20

Trans2持っているとしましょう

Job    TrxDate   TrxStatus
AB123  3/15/2012   10

クエリできる関数を作成できる (または解決策がある) 必要があります。

SELECT JobNo, GetStatusAt(JobNo, '3/1/2012') FROM Job

20を返すようにします。

SELECT JobNo, GetStatusAt(JobNo, '3/17/2012') FROM Job

10を返すようにします。

SELECT JobNo, GetStatusAt(JobNo, '4/1/2012') FROM Job

20を返すようにします。

4

1 に答える 1

2
SELECT  TOP 1
        trxStatus
FROM    (
        (
        SELECT  TOP 1
                *
        FROM    trans1
        WHERE   jobNo = @job
                AND trxDate <= @trxDate
        ORDER BY
                trxDate DESC
        )
        UNION ALL
        (
        SELECT  TOP 1
                *
        FROM    trans2
        WHERE   jobNo = @job
                AND trxDate <= @trxDate
        ORDER BY
                trxDate DESC
        )
        ) q
ORDER BY
        trxDate DESC
于 2012-04-23T19:55:30.663 に答える