2012-04-23 12 views
2

ジョブに関するデータを含む3つのテーブルがあります。 1つのテーブルはマスタテーブルであり、他の2つはトランザクションであり、マスタに関連しています。複数のクエリの結果から単一の値を返すSQL Server関数を作成する方法

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) 

テーブルは常にジョブごとに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 

と返さなければなりません。

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

と、それは10

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

を返し、それは私が前にUNION句クエリを注文しようとしたことがありません20

答えて

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 
+0

を返してきています。ありがとう! –

関連する問題