1

次のような3つのテーブルがあるとします。

TABLE_X     TABLE_Y     TABLE_Z
---------------------------------------
2012/1/1    a           b
2012/1/2    a           b
...         a           b
2012/3/17   a           b
2012/3/18   a           b
2012/3/19   a           b
...         a           b
2012/12/22  a           b
2012/12/23  a           b
2012/12/24  a           b
...         a           b
2013/1/1    a           b

GETDATE()を条件として使用するビューを実行する必要があります。GETDATE()以降のすべての値は列にTABLE_Yなります。GETDATE()の将来のすべての値は、列にTABLE_Zなります。

view_TABLE_X_JOIN_Y_Z
---------------------
2012/1/1    a
2012/1/2    a
...         a
2012/3/17   a
2012/3/18   a
2012/3/19   a
...         a
2012/12/22  a
GETDATE()   a
2012/12/24  b
...         b
2013/1/1    b
2013/1/2    b

私が試したこと:

SELECT x.Date
    ,CASE WHEN GETDATE() > x.Date THEN z.Value
    ELSE y.Value
    END AS Value
FROM TABLE_X x
LEFT JOIN TABLE_Y y ON x.Date = y.Date
LEFT JOIN TABLE_Z z ON x.Date = z.Date

問題は、日付が完全なFK参照ではないことです。つまり、TABLE_Xの日付は完全ですが、YとZの一部の場所で欠落しています。

4

3 に答える 3

2

次のようなものを使用できます。

SELECT 
  CASE WHEN table_x.date_column > GETDATE() THEN table_y.some_column 
                                            ELSE table_z.some_column END
FROM table_x JOIN table_y JOIN table_z (insert appropriate join clauses)
于 2012-12-23T16:11:09.533 に答える
0

私はあなたの質問を正しく理解するかどうかはわかりませんが、これでうまくいくと思います:

SELECT x.date, y.*
FROM x INNER JOIN y ON x.date = y.date
WHERE x.date <= GETDATE()

UNION

SELECT x.date, z.*
FROM x INNER JOIN z ON x.date = z.date
WHERE x.date > GETDATE()

x、y、zは異なるテーブルであり、yとzの日付はxを参照する外部キーであり、yとzも同じ列構造である必要があります。

于 2012-12-23T16:07:19.427 に答える
0

よくわかりません、これを試してください、

create view view_TABLE_X_JOIN_Y_Z as(select y.* from table_y y
where getdate() > (select date from TABLE_X x where y.date=x.date)
union all
select z.* from table_z z where getdate() <= (select date from TABLE_x x 
where z.date=x.date))

ただし、両方のテーブルの列構造は同じである必要があります

于 2012-12-23T16:08:28.973 に答える