2012-10-09 1 views
0

때때로, 하위 쿼리가 좋은이 코드와 같이, 자신의 자리를 가지고 :Sql Server 2008을 사용하여 하위 쿼리가있는 SELECT 문을 리팩토링하는 방법은 무엇입니까?

select x1.test, (select r from table) from ...... 

그러나, 더 하위 쿼리에 추가하는 것은 몇/

이름을 성능 문제 및 재사용 문제처럼 쿼리에 대한 자세한 장애를 생산 나는 아래의 SQL 코드를 리팩토링 것이 이전보다 빠르게 실행하는 방법

...



Select f.c1 
     ,f.c2 
     ,f.c3 As 'c3Id' 
     ,p.Value As 'c3' 
     ,m.c4 As 'r1' 


     ,(Select SUM(t1.table1x) 
      From [ap].table1 t1 
      Where t1.table1x = 1 
       And f.c1 = t1.c1 
       And f.c2 = t1.c2 
       And f.c3 = t1.c3) As 'r2' 

     ,(Select SUM(t2.x) 
      From [ap].table2 t2 
      Where t2.c1 = f.c1 
       And t2.c1 = f.c2 
       And t2.c3 = f.c3) As 'r3' 

     ,(Select SUM(t1.table1x) 
      From [ap].table3 t3 
      Where t3.table3Turu = 2 
       And f.c1 = t3.c1 
       And f.c2 = t3.c2 
       And f.c3 = t3.c3) As 'r4' 

     ,(Select SUM(t4.x) 
      From [ap].table4 t4 
      Where t4.c1 = f.c1 
       And t4.c1 = f.c2 
       And t4.c3 = f.c3) As 'r5' 

From [ap].table1 f 
Inner Join [dbo].table5 m On f.c1 = m.col11 
Inner Join [dbo].table6 p On f.c3 = p.col22 

Where p.xxxx = 'test' 
Group By f.c1, f.c2, f.c3, m.c4, p.Value 

+0

쿼리를 리팩터링 (중복 코드 줄이기)하거나 성능을 향상시키는 것이 가장 중요합니까? 이러한 목표가 상충 될 수 있습니다. – Pondlife

답변

0

당신은 코드를 단순화하기 위해 UDF (사용자 정의 함수)를 사용할 수 있습니다. 함수에 하위 쿼리를 포함시키고 기본 쿼리에서이 함수에 필요한 매개 변수를 보냅니다. 예를 들어, 3 개의 매개 변수 f.c1, f.c2 및 f.c3을 GetSumT1() 함수에 보내고 하위 쿼리 대신 쿼리에서이 매개 변수를 사용할 수 있습니다.

Select f.c1  
,f.c2   
,f.c3 As 'c3Id'   
,p.Value As 'c3'   
,m.c4 As 'r1'    
, GetSumT1(f.c1, f.c2, f.c3) As 'r2' 
... 
... 
+0

Anil : UDF는 알고 있지만이 텍스트 쿼리 여야합니다. – programmerist

관련 문제