将多个 table 与 Teradata 的某些标准相结合
Combining multiple table with certain critera for Teradata
我正在尝试将 3 个不同的 table 组合成具有特定条件的一个。
- Table 2 - 根据发货人编号和发货日期计算货件的总重量
- Table 3 - 根据发货人编号和发货日期计算总收入金额
- 结果 - 将 table 组合成一个 table。
此外,SQL 还应过滤 "Customer Since" <= 720 和 "Ship Date" <= 360
(注:客户编号=发货人编号)
很难说出您在寻找什么,但这可以帮助您入门
SELECT t2.Shipper_Number, t2.Ship_Date, t2.Total_Weight, t3.Total_Revenue
FROM (
SELECT Shipper_Number, Ship_Date, SUM(Weight) AS Total_Weight
FROM Table2
GROUP BY Shipper_Number, Ship_Date
) t2
INNER JOIN (
SELECT Shipper_Number, Ship_Date, SUM(Revenue) AS Total_Revenue
FROM Table3
GROUP BY Shipper_Number, Ship_Date
) t3 ON t2.<PK_column> = t3.<PK_column>
一些注意事项:
- INNER JOIN 只会 return 在两个 table 中匹配的行
- 您可以将
"Customer Since"
和 "Ship Date"
限制添加为子查询中的 WHERE
子句
更新
如果您想为每个 (Shipper_Number, Ship_Date
) 组获取一行,那么您需要使用该列组合 (Shipper_Number, Ship_Date
) 为这两个派生的 table 设置 JOIN
条件.
如果您想进一步过滤 "Customer Since"
上的行,则只需 JOIN
到源 table 并添加过滤条件。像这样:
SELECT t2.Shipper_Number, t2.Ship_Date, t2.Total_Weight, t3.Total_Revenue
FROM (
SELECT Shipper_Number, Ship_Date, SUM(Weight) AS Total_Weight
FROM Table2
WHERE Ship_Date <= Ship_Date - INTERVAL '360' DAY -- Assumes you want only order that shipped within the last 360 days
GROUP BY Shipper_Number, Ship_Date
) t2
INNER JOIN (
SELECT Shipper_Number, Ship_Date, SUM(Revenue) AS Total_Revenue
FROM Table3
WHERE Ship_Date <= Ship_Date - INTERVAL '360' DAY -- Assumes you want only order that shipped within the last 360 days
GROUP BY Shipper_Number, Ship_Date
) t3 ON t2.Shipper_Number = t3.Shipper_Number AND t2.Ship_Date = t3.Ship_Date
INNER JOIN Table1 t1 ON t2.Shipper_Number = t1.Customer_Number -- Get shipper/customer info
WHERE t1."Customer Since" <= "Customer Since" - INTERVAL '720' DAY -- Assuming you want to get customers that are fewer than 720 days old
同样,使用 INNER JOIN
,这假设匹配行存在于两个 table 中(Shipper_Number
和 Ship_Date
),否则它不会 return那一行。
此外,如果可行,您可能需要考虑将 t2
和 t3
table 组合成一个基于公共密钥的 table(shipper_number, shipping_number
) 或者只是 shipping_number
如果它是唯一值。
我正在尝试将 3 个不同的 table 组合成具有特定条件的一个。
- Table 2 - 根据发货人编号和发货日期计算货件的总重量
- Table 3 - 根据发货人编号和发货日期计算总收入金额
- 结果 - 将 table 组合成一个 table。
此外,SQL 还应过滤 "Customer Since" <= 720 和 "Ship Date" <= 360
(注:客户编号=发货人编号)
很难说出您在寻找什么,但这可以帮助您入门
SELECT t2.Shipper_Number, t2.Ship_Date, t2.Total_Weight, t3.Total_Revenue
FROM (
SELECT Shipper_Number, Ship_Date, SUM(Weight) AS Total_Weight
FROM Table2
GROUP BY Shipper_Number, Ship_Date
) t2
INNER JOIN (
SELECT Shipper_Number, Ship_Date, SUM(Revenue) AS Total_Revenue
FROM Table3
GROUP BY Shipper_Number, Ship_Date
) t3 ON t2.<PK_column> = t3.<PK_column>
一些注意事项:
- INNER JOIN 只会 return 在两个 table 中匹配的行
- 您可以将
"Customer Since"
和"Ship Date"
限制添加为子查询中的WHERE
子句
更新
如果您想为每个 (Shipper_Number, Ship_Date
) 组获取一行,那么您需要使用该列组合 (Shipper_Number, Ship_Date
) 为这两个派生的 table 设置 JOIN
条件.
如果您想进一步过滤 "Customer Since"
上的行,则只需 JOIN
到源 table 并添加过滤条件。像这样:
SELECT t2.Shipper_Number, t2.Ship_Date, t2.Total_Weight, t3.Total_Revenue
FROM (
SELECT Shipper_Number, Ship_Date, SUM(Weight) AS Total_Weight
FROM Table2
WHERE Ship_Date <= Ship_Date - INTERVAL '360' DAY -- Assumes you want only order that shipped within the last 360 days
GROUP BY Shipper_Number, Ship_Date
) t2
INNER JOIN (
SELECT Shipper_Number, Ship_Date, SUM(Revenue) AS Total_Revenue
FROM Table3
WHERE Ship_Date <= Ship_Date - INTERVAL '360' DAY -- Assumes you want only order that shipped within the last 360 days
GROUP BY Shipper_Number, Ship_Date
) t3 ON t2.Shipper_Number = t3.Shipper_Number AND t2.Ship_Date = t3.Ship_Date
INNER JOIN Table1 t1 ON t2.Shipper_Number = t1.Customer_Number -- Get shipper/customer info
WHERE t1."Customer Since" <= "Customer Since" - INTERVAL '720' DAY -- Assuming you want to get customers that are fewer than 720 days old
同样,使用 INNER JOIN
,这假设匹配行存在于两个 table 中(Shipper_Number
和 Ship_Date
),否则它不会 return那一行。
此外,如果可行,您可能需要考虑将 t2
和 t3
table 组合成一个基于公共密钥的 table(shipper_number, shipping_number
) 或者只是 shipping_number
如果它是唯一值。