如何根据公式检索列值

时间:2012-11-05 05:21:55

标签: sql sql-server sql-server-2000

使用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行:

    表格中的
  • 类型 - 01(找到z1和z2)然后我想考虑table1 z1 z2列
  • 在table2中输入 - 02(找到z3和z4)然后我想考虑table1 z3 z4列
  • 表格中的
  • 类型 - 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中做到??

1 个答案:

答案 0 :(得分:1)

这是你需要的吗?查询适用于SQL Server 2005,dunno约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