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

Posted

技术标签:

【中文标题】如何显示 2 个有条件的表中的值【英文标题】:How to display the value from 2 tables with condition 【发布时间】:2012-05-31 08:14:01 【问题描述】:

使用 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和日期与table1匹配,那么值将从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 ....
.....

如何做到这一点。

需要查询帮助

预期输出

【问题讨论】:

【参考方案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

【讨论】:

我想首先给出一些重复,但编辑后的查询效果很好。【参考方案2】:

假设 table1 中的行与 table2 中的行具有相同的 id 和日期(例如,如果 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 中的一行匹配,那么您需要汇总并决定要使用哪些不同的值,或者您是否想要取平均值、最小值或最大值。

【讨论】:

以上是关于如何显示 2 个有条件的表中的值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jquery从dot net core mvc中的表中的下拉列表中显示选定的值

我如何使用条件从其他表中更新表中的数据

根据sql中的条件从不同的表中选择一个值

在 codeigniter 中显示 2 个具有活动记录的表中的 3 个最新数据

如何在使用 SQL 的重复搜索中排除其他值中的值

如何从sql server中的表中查询json数组类型列的值?