2012-04-23 1 views
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) 

테이블 Job 테이블에는 항상 작업 당 하나의 행이 있습니다. Trans1Trans2에는 작업 당 하나 또는 여러 개의 행이 없습니다.

주어진 작업에 대해 지정된 날짜에 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 

를 반환하고 내가 전에 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

을 반환 한있다. 감사! –

관련 문제