代码之家  ›  专栏  ›  技术社区  ›  Cát Tường Vy

跨表的SQL查询计算

  •  1
  • Cát Tường Vy  · 技术社区  · 7 年前

    我有3个使用以下查询连接的表:

    SELECT 
        b.[_PRESS_INST_NO]
        ,a.[X_PO_NO]
        ,a.[X_GOODS_CD]
        ,a.[X_QTY]
        ,c.RM_CD
        ,c.RM_QTY
    FROM 
        T1 a
        INNER JOIN T2 b ON a.X_PO_NO=b.X_PO_NO
        INNER JOIN T3 c ON b._PRESS_INST_NO=c.[_PRESS_INST_NO]
    

    enter image description here

    RM_QTYPerUnit

    RM_QTYPerUnit = X_QTY * RM_QTY / SUM(X_QTY)
    

    X_PO_编号:VG00181的总RM_数量为2320,X_GOODS_CD:332034960的RM_数量为1094.34而非2320。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Vladimir Baranov    7 年前

    SUM 分区依据 X_PO_NO . 使用 OVER 条款:

    SELECT 
        b.[_PRESS_INST_NO]
        ,a.[X_PO_NO]
        ,a.[X_GOODS_CD]
        ,a.[X_QTY]
        ,c.RM_CD
        ,c.RM_QTY
        ,a.[X_QTY] * c.RM_QTY / 
        SUM(CAST(a.[X_QTY] AS float)) OVER (PARTITION BY a.X_PO_NO) AS RM_QTYPerUnit
    FROM 
        T1 a
        INNER JOIN T2 b ON a.X_PO_NO=b.X_PO_NO
        INNER JOIN T3 c ON b._PRESS_INST_NO=c.[_PRESS_INST_NO]
    ;
    

    X_QTY int ,然后将其投射到 float decimal