【问题标题】:Combine three columns from different tables into one row将不同表中的三列合并为一行
【发布时间】:2018-07-05 18:23:23
【问题描述】:

我是 sql 新手,正在尝试将三个不同表中的列值合并到 DB2 Warehouse on Cloud 中的一行。每个表只包含一行和唯一的列名。所以我想要的只是将这三行加入它们的原始列名。

每个表都是由如下所示的语句构建的:

SELECT SUM(FUEL_TEMP.FUEL_MLAD_VALUE) AS FUEL 
FROM
    (SELECT ML_ANOMALY_DETECTION.MLAD_METRIC AS MLAD_METRIC, ML_ANOMALY_DETECTION.MLAD_VALUE AS FUEL_MLAD_VALUE, ML_ANOMALY_DETECTION.TAG_NAME AS TAG_NAME, ML_ANOMALY_DETECTION.DATETIME AS DATETIME, DATA_CONFIG.SYSTEM_NAME AS SYSTEM_NAME
     FROM ML_ANOMALY_DETECTION 
         INNER JOIN DATA_CONFIG ON 
               (ML_ANOMALY_DETECTION.TAG_NAME  =DATA_CONFIG.TAG_NAME AND 
                DATA_CONFIG.SYSTEM_NAME = 'FUEL') 
     WHERE ML_ANOMALY_DETECTION.MLAD_METRIC = 'IFOREST_SCORE'
       AND ML_ANOMALY_DETECTION.DATETIME >= (CURRENT DATE - 9 DAYS) 
     ORDER BY DATETIME DESC)
AS FUEL_TEMP

我尝试过 JOIN、INNER JOIN、UNION/UNION ALL,但无法正常工作。我该怎么做?

【问题讨论】:

  • 阅读stackoverflow.com/help/mcve 是询问问题的良好开端。
  • 上面的查询是1表查询有效的例子,你基本上需要这样做3次,然后变成1个视图?
  • 是的,它是一个表查询,我想成为结果表中的列之一。所以是的,我想将其中三个组合到一个三列一行的表格中。 @Crezzer7
  • 好的,这3个表叫什么,你想要什么列?
  • 所以,你有 3 个表格,每个数字有 1 行。你想总结所有这 3 个值。您可以尝试将其合并到具有 3 行的单个表中,然后对所有值求和。表1联合所有表2

标签: sql db2 ibm-cloud


【解决方案1】:

使用 UNION 应该可以解决您的问题。像这样的:

SELECT
  WarehouseDB1.WarehouseID AS TheID,
  'A' AS TheSystem,
  WarehouseDB1.TheValue AS TheValue
FROM WarehouseDB1
UNION
SELECT
  WarehouseDB2.WarehouseID AS TheID,
  'B' AS TheSystem,
  WarehouseDB2.TheValue AS TheValue
FROM WarehouseDB2
UNION
  WarehouseDB3.WarehouseID AS TheID,
  'C' AS TheSystem,
  WarehouseDB3.TheValue AS TheValue
FROM WarehouseDB3

如果你告诉我它们是什么,我会用你的表名和行来调整代码。这种查询会返回如下内容:

TheID   TheSystem   TheValue
  1         A          10
  2         A          20
  3         B          30
  4         C          40
  5         C          50

只要你的列名在每个查询中匹配,你就应该得到想要的结果。

【讨论】:

  • 这并不能解决问题。我有一张表,列名为“燃料”,一行,一张表,“锅炉”,一行,最后一张,“残渣”,一行。这三个表有一个一行和一列,每个都有不同的名称,我想将它们组合到一个一行一行的表中,并根据它们的名称将三列组合起来。
  • 啊,好的,我现在明白了,我认为您可能需要将表合并在一起,因此数据都在一个地方,然后转置它......也许这会有所帮助:stackoverflow.com/questions/13372276/…
【解决方案2】:

使用这样的交叉连接:

create table table1 (field1 char(10));
create table table2 (field2 char(10));
create table table3 (field3 char(10));

insert into table1 values('value1');
insert into table2 values('value2');
insert into table3 values('value3');

select *
  from table1
  cross join table2
  cross join table3;

结果:

field1     field2     field3
---------- ---------- ----------
value1     value2     value3

交叉连接将左侧的所有行与右侧的所有行连接起来。您最终将得到行的乘积(table1 行 x table2 行 x table3 行)。由于每个表只有一行,因此您将得到 (1 x 1 x 1) = 1 行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    相关资源
    最近更新 更多