0

SQLServer2000でのビューの使用

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とz2が見つかりました)では、table1z1z2列を検討します
  • table2タイプ-02(z3とz4が見つかりました)では、table1z3z4列を検討します
  • table2タイプ-03(z1、z2、z3、およびz4が見つかりました)では、table1 z1、z2、z3z4列を検討します

期待される出力

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

これはあなたが必要なものですか?クエリはSQLSever2005で機能しますが、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 に答える