4

테이블을 매개 변수로 사용하고 (2 열 테이블) UDF를 사용하여 article과 같은 문자열을 출력합니다. 나는이 같은 여러 열을 통해 UDF를 적용 할 테이블이 있습니다
SQL - 선택 테이블에서 UDF로 테이블 넘김

Date Unit Line Revenue Orders 
4/1/12 D  R  20.00  3 
4/2/12 D  R  25.00  4 
4/1/12 H  W  33.00  1 
4/2/12 H  W  35.00  3 
내가 가장 최근의 날짜가이 테이블의 모든 행에 내 UDF를 호출로 UDF에게 표를 전달하려는

각 개별 단위 및 선에 대한 날짜 및 수익 열 또한 UDF를 호출하고 각기 다른 단위 및 선에 대해 날짜 및 주문을 전달하려고합니다. 이것은 보고서이며 UDF에는 항상 Date 열과 다른 계산 열을 전달하고 저장 및보고하려는 열이 전달됩니다. 그래서 CROSS APPLY가 포함 많은 것들을 살펴 보았다 나는 이런 일을하고 싶지 :

SELECT  T.unit 
       , T.line 
       , dbo.fn_myUDF((SELECT T2.Date, T2.Revenue FROM #Table T2)) as UDFRevenueResult 
       , dbo.fn_myUDF((SELECT T2.Date, T2.Orders FROM #Table T2)) as UDFOrderResult 
FROM   #Table T 
WHERE   T.Date = @ReportDate 

서브 쿼리가없는 경우이 나에게 "하나 개의 표현이 선택 목록에 지정할 수있는 오류를 제공 EXISTS에서 소개되었습니다. " 나는 CROSS APPLY를 보았지만 테이블 변수를 리턴 할 때만 적용되는 것처럼 보인다. 그래서 아마도 커서와 루프를 사용하여 각 루프 반복에서 UDF로 전달하려는 각 테이블을 구성하여 내 자신의 질문에 대답 할 수는 있지만 그 생각은 옳지 않습니다. 누구든지 SQL Server 2008에서 원하는 것을 할 수있는 아이디어를 줄 수 있습니까?

답변

3

쿼리의 SELECT 부분에서 테이블 변수를 반환하는 하위 쿼리는 이와 같이 사용할 수 없습니다. 단일 값만 반환 할 수 있습니다. 마찬가지로 :

set @myParam = (select myvalue from table where primarykey = 1) 

또는

set @myParam = (select top 1 myvalue from table) 

그러나, 당신의 하위 쿼리가 선택되는 행에 대한 관계가없는 점을 감안,이 같은 작업을 수행 할 수 있습니다.

declare @t1 table (DateTime c1, float c2) 
insert @t1 
SELECT Date, Revenue 
FROM #Table 

declare @t2 table (DateTime c1, int c2) -- not sure on data type of 'Orders' 
insert @t2 
SELECT Date, Orders FROM #Table 


SELECT T.unit    
    , T.line    
    , dbo.fn_myUDF(@t1) as UDFRevenueResult    
    , dbo.fn_myUDF(@t2) as UDFOrderResult 
FROM #Table T 
WHERE T.Date = @ReportDate 
+0

나는 두려웠다. 고유 한 단위 및 선을 사용하여 테이블을 하위 테이블로 쉽게 분할 할 수있는 방법이 있습니까? 아니면 각 UDF를 전달하려는 각 Unit/Line 및 Column에 대한 테이블을 만들어야합니까? – deusxmach1na

+0

@ deusxmach1na - 각 행을 표로 처리하려고합니까? –

+0

각 행이 아니지만 Unit 및 Line이 같은 모든 행이 테이블이어야합니다. 내 UDF는 Date 열과 Revenue 열을 가져 와서 모든 고유 한 Unit 및 Line 값에 대해 수행 할 계산을 수행합니다. 그래서 내 예제 테이블에서 Unit H와 Line R이기 때문에 첫 번째 두 개의 행을 하나의 테이블로 만들고 싶습니다. Unit H와 Line W이기 때문에 다음 두 행을 다른 테이블로 만들려고합니다. – deusxmach1na

관련 문제