连接两个表 - 一个具有不同值的公共列

Join two tables - One common column with different values

几天来我一直在寻找如何做到这一点 - 不幸的是我在 SQL 查询方面没有太多经验,所以一直在反复试验。

基本上,我创建了两个 tables - 都有一个 DateTime 列和一个包含值的不同列。 DateTime 列在每个 table.

中具有不同的值

所以...

ACOQ1 (Table 1)
===============

| DateTime | ACOQ1_Pump_Running |
|----------+--------------------|
| 7:14:12  |         1          |
| 8:09:03  |         1          |

ACOQ2 (Table 2)
===============

| DateTime | ACOQ2_Pump_Running |
|----------+--------------------|
| 3:54:20  |         1          |
| 7:32:57  |         1          |

我想将这两个 table 组合成这样:

| DateTime | ACOQ1_Pump_Running | ACOQ2_Pump_Running |
|----------+--------------------+--------------------|
| 3:54:20  |      0 OR NULL     |         1          |
| 7:14:12  |         1          |      0 OR NULL     |
| 7:32:57  |      0 OR NULL     |         1          |
| 8:09:03  |         1          |      0 OR NULL     |

我通过创建第三个 table 来实现这一点,它是来自两个 table 的 DateTime 列,然后使用第三个 table 的 DateTime 列作为新的 table 但想知道是否有办法跳过这一步。 (最终,我将从不同的 table 中添加越来越多的列,并且真的不想通过创建可能没有必要的联合 DateTime table 来增加更多的处理时间)。 =14=]

我目前的工作代码:

CREATE TABLE JointDateTime
(
DateTime CHAR(50)
CONSTRAINT [pk_Key3] PRIMARY KEY (DateTime)
);

INSERT INTO JointDateTime (DateTime)
SELECT ACOQ1.DateTime FROM ACOQ1
UNION
SELECT ACOQ2.DateTime FROM ACOQ2

SELECT JointDateTime.DateTime, ACOQ1.ACOQ1_NO_1_PUMP_RUNNING, ACOQ2.ACOQ2_NO_1_PUMP_RUNNING
FROM (SELECT ACOQ1.DateTime FROM ACOQ1
      UNION
      SELECT ACOQ2.DateTime FROM ACOQ2) JointDateTime
LEFT OUTER JOIN ACOQ1
    ON JointDateTime.DateTime = ACOQ1.DateTime
LEFT OUTER JOIN ACOQ2
    ON JointDateTime.DateTime = ACOQ2.DateTime

你需要一个像这样的普通老 FULL OUTER JOIN

SELECT COALESCE(A1.DateTime,A2.DateTime) DateTime,ACOQ1_Pump_Running, ACOQ2_Pump_Running
FROM ACOQ1 A1 
FULL OUTER JOIN ACOQ2 A2 
    ON A1.DateTime = A2.DateTime

对于 ACOQ1_Pump_Running,这将为您提供 NULL,对于与相应 table 中的日期不匹配的行,将提供 ACOQ2_Pump_Running。如果您需要 0 只需使用 COALESCEISNULL.

旁注::在您的脚本中,我可以看到您正在使用 DateTime CHAR(50)。请使用appropriate types