如何使用条件显示2个表中的值

时间:2012-05-31 08:14:02

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

使用SQL Server 2000

表1

ID date value

001 23/01/2012 100
002 25/02/2012 200
....

表2

Id date value

001 01/01/2012 200
001 02/01/2012 100
...
001 23/02/2012 200
...
001 31/03/2012 100
002 ....
.....

我想选择table2值,如果id和date与table1匹配,那么value将从table1中显示

Id日期值

001 01/01/2012 200
001 02/01/2012 100
...
001 23/02/2012 100 'matching id and date from table1
...
001 31/03/2012 100
002 ....
.....

如何做到这一点。

需要查询帮助

预期产出

2 个答案:

答案 0 :(得分:1)

假设table1中的行中永远不会有一行,其id和日期与table2中的行相同(例如,如果id / date是table1的唯一/主键),则以下内容将起作用:

SELECT
    table2.id,
    table2.date,
    ISNULL(table1.value, table2.value) AS value
FROM table2
    LEFT OUTER JOIN table1 ON table2.id = table1.id
        AND table2.date = table1.date

如果table1中的多行可能与table2中的行匹配,那么您需要聚合并决定使用哪个不同的值,或者是否要取平均值,最小值或最大值。

答案 1 :(得分:1)

SELECT DISTINCT Table2.ID, Table2.date,
            CASE
                WHEN Table1.ID = Table2.ID
                     AND Table1.date = Table2.date THEN Table1.value
                ELSE Table2.value
            END
FROM Table1, Table2

修改

SELECT n_t.n_ID,
       n_t.n_date,
       n_t.n_value
FROM
  (SELECT Table2.ID AS n_ID,
          Table2.date AS n_date,
          CASE
              WHEN Table1.ID = Table2.ID THEN CASE
                                                  WHEN Table1.date = Table2.date THEN Table1.value
                                                  ELSE Table2.value
                                              END
          END AS n_value
   FROM Table1,
        Table2) AS n_t
WHERE n_t.n_value IS NOT NULL