连接两个表 - 一个具有不同值的公共列
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
只需使用 COALESCE
或 ISNULL
.
旁注::在您的脚本中,我可以看到您正在使用 DateTime CHAR(50)
。请使用appropriate types
几天来我一直在寻找如何做到这一点 - 不幸的是我在 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
只需使用 COALESCE
或 ISNULL
.
旁注::在您的脚本中,我可以看到您正在使用 DateTime CHAR(50)
。请使用appropriate types