我的数据库中有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.
任何建议都将不胜感激!
答案 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条件的记录。