gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:43:13 24 4
gpt4 key购买 nike

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

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

所以...

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 |

我想将这两个表组合起来,如下所示:

| 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 |

我通过创建第三个表来实现这一点,该表“UNION”是两个表中的 DateTime 列,然后使用第三个表的 DateTime 列作为新表,但我想知道是否有办法跳过此步骤。(最终,我将从不同的表中添加越来越多的列,并且实际上不想通过创建可能没有必要的联合 DateTime 表来添加更多的处理时间)。

我目前的工作代码:

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,为与相应表中的日期不匹配的行提供 ACOQ2_Pump_Running。如果您需要 0,只需使用 COALESCEISNULL

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

关于sql - 连接两个表 - 具有不同值的一个公共(public)列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30393329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com