【问题标题】:How to query a table with a Where clause that loops through a different table?如何使用遍历不同表的 Where 子句查询表?
【发布时间】:2018-10-12 19:26:35
【问题描述】:

我的数据库中有 2 个表

表 1

 DC     Item     Day
6006    123      May 1
6006    123      May 2
7036    456      May 6

表 2

 DC     Item      Day    ShippedCases    Label Type
6006    123      May 1       100             A
6006    123      May 2       200             A
6006    123      May 2       500             B 
7036    456      May 2       300             B
7036    456      May 6       400             A

表 1 包含我感兴趣的所有唯一记录,但它不包含 ShippedCases 或标签类型。如何编写查询以从表 2 中选择与表 1 中的记录匹配的所有记录?

在这种情况下,我想在表 2 中选择与表 1 匹配的 DC、项目、日期字段,并对标签类型 = A 的已发货案例求和。

结果视图

DC       Item   Day     Shipped Cases    Label Type
6006     123    May 1        100              A
6006     123    May 2        200              A 
7036     456    May 6        400              A

我认为这是一个简单的 Select 语句,但我不知道如何设置 where 子句,我的前 3 个参数是表 1 字段和表 2 标签类型 = A 的第 4 个参数。

任何建议将不胜感激!

【问题讨论】:

    标签: teradata where-clause teradata-sql-assistant


    【解决方案1】:

    您想在此处使用 INNER JOIN 并使用 SUM()GROUP BY 进行聚合

    SELECT
        table1.DC,
        table1.Item,
        table1.Day,
        Sum(table2.ShippedCases) as ShippedCases,
        Table2.LabelType
    FROM
        Table1
        INNER JOIN Table2 
            ON Table1.DC = Table2.DC
                AND Table1.Item = Table2.Item
                AND Table1.Day = Table2.Day
    WHERE
        Table2.LabelType = 'A'
    GROUP BY 1,2,3,5
    

    如果您在 Table1 中有未出现在 Table2 中的项目,那么您需要将其转换为 LEFT OUTER JOIN:

    SELECT
        table1.DC,
        table1.Item,
        table1.Day,
        Sum(table2.ShippedCases) as ShippedCases,
        Table2.LabelType
    FROM
        Table1
        LEFT OUTER JOIN Table2 
            ON Table1.DC = Table2.DC
                AND Table1.Item = Table2.Item
                AND Table1.Day = Table2.Day
                AND Table2.LabelType = 'A'
    GROUP BY 1,2,3,5
    

    请注意,我们将 WHERE 子句向上移动到 LEFT OUTER JOIN 的 ON 子句中,以确保只有 Table2 中的项目受该 LabelType 的限制。换言之,Teradata 将在加入 Table1 之前过滤 Table2。因为它是 LEFT OUTER JOIN,所以您将从 Table1 中获取所有记录,然后仅从 Table2 中获取通过过滤器并匹配 ON 条件的记录。

    【讨论】:

    • 当然,使用示例数据,将返回相同的结果,无需聚合。如果内连接提供了正确的解决方案,则不需要连接,您可以简单地聚合 table2 :-)
    猜你喜欢
    • 1970-01-01
    • 2020-08-18
    • 2022-01-17
    • 2017-10-14
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多