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表将始终为每个作业一行。Trans1并且Trans2每个作业将没有、一行或多行。

对于给定的工作,我需要能够编写一个查询,该查询将返回给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 回答