2014-11-20 2 views
0

아래 조합 쿼리가 있으며 15 개의 단계를 거칩니다. 나는 단지 세 가지를 보여주기 때문에 아이디어를 얻는다. 입력 할 때 맨 위에 변수를 설정하여 매번 15x3 기준을 변경할 필요가 없습니다. 내가 모든 사람에게 적용하려면 상단에 한 번 설정하려는 변수는 다음과 같습니다 pyh_per_cc pyh_tc_batch pyh_no01 (참고 :이가 'IN'기준입니다)통합 쿼리에 대한 변수 설정

이 할 수있는 방법이 있나요? 차이가 나는 경우 SQL Server Mgmt Studio 2008 R2를 사용하고 있습니다. 미리 감사드립니다.

select hr_pe_id, pyh_no01 pyh_no, pyh_amt01 pyh_amt 
from pyh_hst_dtl 
where pyh_no01 <> 0 
and pyh_per_cc = '1301001' 
and pyh_tc_batch = 'P1301001' 
and pyh_no01 in ('2100','2101','2105','2108','2113','2115','2117','2118','2119') 
union 
select hr_pe_id, pyh_no02 pyh_no, pyh_amt02 pyh_amt 
from pyh_hst_dtl 
where pyh_no02 <> 0 
and pyh_per_cc = '1301001' 
and pyh_tc_batch = 'P1301001' 
and pyh_no02 in ('2100','2101','2105','2108','2113','2115','2117','2118','2119') 
union 
select hr_pe_id, pyh_no03 pyh_no, pyh_amt03 pyh_amt 
from pyh_hst_dtl 
where pyh_no03 <> 0 
and pyh_per_cc = '1301001' 
and pyh_tc_batch = 'P1301001' 
and pyh_no03 in ('2100','2101','2105','2108','2113','2115','2117','2118','2119') 
order by hr_pe_id 
+0

임시 '메모리 테이블'을 사용할 수 있습니까? 이것은 '비 피벗'입니까? –

+0

'피벗 해제'가 무엇인지 모릅니다 ...? – Jenn

+0

UNPIVOT은 열을 행으로 회전하여 PIVOT의 거의 역방향 연산을 수행합니다. 그게 니가하려는 생각이야? [표준 -T-SQL-unpivot] (http://www.ingenioussql.com/2013/05/09/standard-t-sql-unpivot/). 종종 '절차 언어'를 사용하여 데이터베이스 외부에서 작업하는 것이 더 쉽습니다. –

답변

0

죄송합니다. 같은 필드의 값을 두 번 테스트하고 싶지 않습니다.

이 방법이 유용할까요?

CREATE TABLE #pyh_nos(pyh_no char(4)); 

insert into #pyh_nos values ('2100'); 
insert into #pyh_nos values ('2101'); 
insert into #pyh_nos values ('2105'); 
insert into #pyh_nos values ('2108'); 
insert into #pyh_nos values ('2113'); 
insert into #pyh_nos values ('2115'); 
insert into #pyh_nos values ('2117'); 
insert into #pyh_nos values ('2118'); 
insert into #pyh_nos values ('2119'); 

select 
hr_pe_id, pyh_no01 pyh_no, pyh_amt01 pyh_amt 
from 
pyh_hst_dtl h left outer join 
#pyh_nos p1 on 
pyh_no01 = p1.pyh_no left outer join 
#pyh_nos p2 on 
pyh_no02 = p2.pyh_no 
... 
left outer join 
#pyh_nos p15 on 
pyh_no15 = p15.pyh_no 
where 
pyh_per_cc = '1301001' 
and pyh_tc_batch = 'P1301001' and 
(p1.pyh_no is not null or 
... 
p15.pyh_no is not null) 
+0

뛰어난 관찰. OP가 쿼리를 단순화해야하는 방식입니다. – paqogomez

+0

이 쿼리는 동일하지 않습니다. 질문에 나열된 각 수준은 항상 pyh_no01이 아닌 pyh_no02 및 pyh_no03이 아닌 다른 필드의 값을 조사합니다. –

+0

? 이 쿼리는 또한 15 개의 다른 필드에서 값을 찾습니다. – Beth

관련 문제