如何使用循环不同表的Where子句查询表?

时间:2018-05-02 15:56:44

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

我的数据库中有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或Label Type。如何编写查询以选择表2中与表1中的记录匹配的所有记录?

在这种情况下,我想选择表2中匹配表1的DC,Item,Day字段,并对标签类型= 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子句,前三个参数是表1字段,第二个参数是表2标签类型= A.

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:0)

您想在此处使用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条件的记录。