通过查询将计算列添加到 SQL 组

问题描述 投票:0回答:1

我正在尝试学习如何在按查询在组中计算的列上运行几个计算字段。

我在 Microsoft Access 中通过 (ODBC) 运行 SQL 查询。

SELECT 
    MasterItemID, ItemID,
    SUM(SWITCH(JournalEX = 18, StockQtyRec, JournalEX <> 18, 0)) AS orderedByZG,
    SUM(SWITCH(JournalEX = 19, StockQty, JournalEX <> 19, 0)) AS orderedFromZG,
    ABS(SUM(SWITCH(JournalEX = 9 AND IncludeInInvLedger = 1, StockQty, JournalEX <> 9 AND IncludeInInvLedger <> 1, 0))) AS returnedItems,
    SUM(SWITCH(JournalEX = 14 AND IncludeInInvLedger = 1, StockQty, JournalEX <> 14 AND IncludeInInvLedger <> 1, 0)) AS inventoryAdjustments
FROM 
    qryHdrtoLineItem
GROUP BY 
    MasterItemID, ItemID;

我需要包括两个额外的列,每个列都是按字段分组的计算,但它们不是汇总总计并且不在按查询分组中运行。

quantityOnHand
orderedByZG - orderedFromZG - returnedItems + inventoryAdjustments

returnPercentage
returnedItems / orderedFromZG * 100

我通过保存上述查询并运行引用列名称的查询然后添加计算列来使其工作。

这可以通过 CTE 完成吗?有没有更好的方法来完成这个?

注意: Access odbc中的switch函数与Case一样。

sql ms-access
1个回答
0
投票

带有子查询:

SELECT 
   MasterItemId,
   ItemID,
   orderedByZG - orderedFromZG - returnedItems + inventoryAdjustments as QtyOnHand,
   returnedItems / orderedFromZG * 100 as returnPercentage
FROM 
   (

    SELECT 
        MasterItemID, ItemID,
        SUM(SWITCH(JournalEX = 18, StockQtyRec, JournalEX <> 18, 0)) AS orderedByZG,
        SUM(SWITCH(JournalEX = 19, StockQty, JournalEX <> 19, 0)) AS orderedFromZG,
        ABS(SUM(SWITCH(JournalEX = 9 AND IncludeInInvLedger = 1, StockQty, JournalEX <> 9 AND IncludeInInvLedger <> 1, 0))) AS returnedItems,
        SUM(SWITCH(JournalEX = 14 AND IncludeInInvLedger = 1, StockQty, JournalEX <> 14 AND IncludeInInvLedger <> 1, 0)) AS inventoryAdjustments
    FROM 
        qryHdrtoLineItem
    GROUP BY 
        MasterItemID, ItemID

) sub
© www.soinside.com 2019 - 2024. All rights reserved.