将多个 table 与 Teradata 的某些标准相结合

Combining multiple table with certain critera for Teradata

我正在尝试将 3 个不同的 table 组合成具有特定条件的一个。

  1. Table 2 - 根据发货人编号和发货日期计算货件的总重量
  2. Table 3 - 根据发货人编号和发货日期计算总收入金额
  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_NumberShip_Date),否则它不会 return那一行。

此外,如果可行,您可能需要考虑将 t2t3 table 组合成一个基于公共密钥的 table(shipper_number, shipping_number) 或者只是 shipping_number 如果它是唯一值。