Значение должно быть 0 между двумя датами? - PullRequest
0 голосов
/ 08 октября 2009

Использование SQL Server 2000

Я хочу сравнить table2.date между table1.from, table1.todate, если существует, значение должно быть 0 (ноль)

Table1

ID FromDate ToDate

001 20090801 20090815
002 20090817 20090820
…,

Table2

Id Date Value

001 20090730 100
001 20090731 200
001 20090801 300
001 20090802 400
…
001 20090815 0
001 20090816 250
…

Из приведенных выше двух таблиц я хочу идентифицировать, Date, значение из table2, где table2.date между table1.fromdate и table1.todate затем table2.value = 0

Ожидаемый результат

Id Date Value

001 20090730 100
001 20090731 200
001 20090801 0
001 20090802 0
…

001 20090815 0
001 20090816 250

Как сделать запрос для этого условия?

Ответы [ 2 ]

1 голос
/ 08 октября 2009

Это покажет value для существующих записей, 0 для отсутствующих записей:

SELECT  t2.id, t2.date,
        COALESCE(
        (
        SELECT  TOP 1 t2.value
        FROM    table1 t1
        WHERE   t2.date BETWEEN t1.fromdate AND t1.todate
                AND t2.id = t1.id
        ), 0) AS value
FROM    table2 t2

Это будет работать наоборот: 0 для имеющихся записей, value для отсутствующих записей:

SELECT  t2.id, t2.date,
        COALESCE(
        (
        SELECT  TOP 1 0
        FROM    table1 t1
        WHERE   t2.date BETWEEN t1.fromdate AND t1.todate
                AND t2.id = t1.id
        ), t2.value) AS value
FROM    table2 t2
0 голосов
/ 08 октября 2009
select t2.id, t2.date, coalesce(T.value, 0) value
from table2 t2
left join 
     (select t22.id, t22.date, t22.value
        from table2 t22
       where not exists (select null from table1 t1
                          where t22.date between t1.fromdate and t1.todate)
     ) T on t2.id = T.id and t2.date = T.date
...