获取特定日期的其他记录

时间:2016-08-05 07:51:35

标签: sql tsql sql-server-2008-r2

我有以下情况:

两个表,结构相同。

t1 --> oDate datetime, oVal int<br>
t2 --> oDate datetime, oVal int<br>

让我们说数据是:

T1:

---------------------
oDate         oVal
---------------------
2016-07-30    30
2016-07-31    40
2016-08-01    35
2016-08-02    50

T2:

--------------------
oDate         oVal
---------------------
2016-07-30    56
2016-07-31    34
自“2016-08-01”以来,

t2为空,字段为oDateoVal

我希望得到以下结果:

---------------------------
oDate          oVal1     oVal2
---------------------------
2016-07-30     30        56
2016-07-31     40        34
2016-08-01     35        35
2016-08-02     50        50

因为表格t2自“2016-08-01”后为空,oVal2的值是oVal1的副本。

如何使用SQL Query执行此操作? 谢谢。

2 个答案:

答案 0 :(得分:3)

使用left joincase,如下所示:

SELECT T1.oDate, T1.oVal oVal1, CASE WHEN T2.oVal IS NULL THEN T1.oVal ELSE T2.oVal END oVal2
FROM T1
LEFT JOIN T2 ON T1.oDate=T2.oDate

看一下demo:

WITH T1 AS
(
    SELECT * FROM (VALUES
    (CONVERT(datetime, '2016-07-30'), 30),
    (CONVERT(datetime, '2016-07-31'), 40),
    (CONVERT(datetime, '2016-08-01'), 35),
    (CONVERT(datetime, '2016-08-02'), 50)) T(oDate, oVal)
), T2 AS
(
    SELECT * FROM (VALUES
    (CONVERT(datetime, '2016-07-30'), 56),
    (CONVERT(datetime, '2016-07-31'), 34)) T(oDate, oVal)
)
SELECT T1.oDate, T1.oVal oVal1, CASE WHEN T2.oVal IS NULL THEN T1.oVal ELSE T2.oVal END oVal2
FROM T1
LEFT JOIN T2 ON T1.oDate=T2.oDate

答案 1 :(得分:0)

SEL a.odate,a.oval,聚结(b.oval,a.oval) 从t1 a 离开加入 t2 b 在a.odate = b.odate