0

在 SQL Server 2000 中使用视图

Table1

id  z1      z2      z3      z4   type
--------------------------------------
01A 300     400     300     400  01
2B  300     400     300     400  02
3C  500     300     400     300  01
04A 500     400     500     400  01
05B 400     300     400     300  02
06  150     200     200     150  03
....

Table2

type  Formula1           Formula2
------------------------------------    
01    ((Z1+Z2)/1000)*2   null
02    null               ((Z3+Z4)/1000)*2
03    ((Z1+Z2)/1000)*2   ((Z3+Z4)/1000)*2

我想table1根据table2公式选择行:

  • 在 table2 类型中 - 01 (z1 and z2 found) 然后我想考虑 table1 z1 z2 列
  • 在 table2 类型中 - 02(找到 z3 和 z4)然后我想考虑 table1 z3 z4 列
  • 在 table2 类型中 - 03(找到 z1、z2、z3 和 z4)然后我想考虑 table1 z1、z2、z3 z4 列

预期产出

Table1

id   z1     z2     z3     z4    type
-------------------------------------    
01A  300    400    null   null  01
2B   null   null   300    400   02
3C   500    300    null   null  01
04A  500    400    null   null  01
05B  null   null   400    300   02
06   150    200    200    150   03

目前我正在使用一个视图,我不想更改为存储过程,因为大多数报告都在使用这个视图。

如何在 sql.. 中做到这一点?

4

1 回答 1

1

这是你需要的吗?查询在 SQL Sever 2005 中工作,donno 大约 2000,请检查:

select a.ID,
  (CASE WHEN PATINDEX('%Z1%', ISNULL(b.Formula1,'')+ISNULL(b.Formula2,''))<>0 THEN a.Z1 ELSE NULL END) Z1,
  (CASE WHEN PATINDEX('%Z2%', ISNULL(b.Formula1,'')+ISNULL(b.Formula2,''))<>0 THEN a.Z2 ELSE NULL END) Z2,
  (CASE WHEN PATINDEX('%Z3%', ISNULL(b.Formula1,'')+ISNULL(b.Formula2,''))<>0 THEN a.Z3 ELSE NULL END) Z3,
  (CASE WHEN PATINDEX('%Z4%', ISNULL(b.Formula1,'')+ISNULL(b.Formula2,''))<>0 THEN a.Z4 ELSE NULL END) Z4, 
  b.* 
From TABLE1 a inner join TABLE2 b on a.type=b.type
于 2012-11-05T07:52:54.847 回答