2014-11-20 91 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

使用临时“内存表”可能/值得吗?这是'不支点'吗? – 2014-11-20 21:40:16

+0

不确定什么是'不可调整的'是...? – Jenn 2014-11-20 22:25:30

+0

UNPIVOT通过将列旋转为行来执行几乎反向操作的PIVOT。那是我认为你正在尝试做的事情? [标准T-SQL-逆转置(http://www.ingenioussql.com/2013/05/09/standard-t-sql-unpivot/)。使用'过程语言'在数据库之外执行操作有时更容易 – 2014-11-20 22:37:17

回答

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 2014-11-20 21:42:07

+0

这个查询是不一样的。问题中列出的每个级别都会查看不同字段的值,而不是总是pyh_no01,但是pyh_no02和pyh_no03 – 2014-11-20 21:43:18

+0

?此查询还查找15个不同字段中的值 – Beth 2014-11-20 21:44:57