向 SQL 查询添加 Inknown 条件

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

我有一个名为 Transaction_Body 的简单表

身份证 物品ID 日期X 商品数量 总成本
1 1 2023-06-08 -1 -500
2 1 2023-06-07 -2 -1000
3 1 2023-06-07 1 400
4 1 2023-06-03 2 800

请注意我有一些价值观< 0

我这里有一个简单的查询

select 
    SUM(T.totalcost) / SUM(T.ItemAmount) as AVG
FROM Transaction_Body T
Where T.ItemsID = 1 and T.DateX <='2023-06-07' 
group by T.ItemsID

这段代码给了我平均值,但我想在这些条件旁边添加一个条件

((如果“物品数量”< 0 in 'DateX' = '2023-06-07' Just ignore it from calculation ))

sql sql-server
2个回答
1
投票

尝试以下查询:-

SELECT 
    SUM(CASE WHEN T.ItemAmount < 0 AND T.DateX = '2023-06-07' THEN 0 ELSE T.totalcost END) /
    SUM(CASE WHEN T.ItemAmount < 0 AND T.DateX = '2023-06-07' THEN 0 ELSE T.ItemAmount END) AS AVG
FROM Transaction_Body T
WHERE T.ItemsID = 1 AND T.DateX <= '2023-06-07'
GROUP BY T.ItemsID;

1
投票

试试这个:

SELECT 
    SUM(T.totalcost) / SUM(T.ItemAmount) as AVG
FROM Transaction_Body T
WHERE T.ItemsID = 1
    AND T.DateX <= '2023-06-07'
    /* Exclude rows where ItemAmount < 0 on DateX = '2023-06-07' */
    AND NOT EXISTS (
        SELECT 1
        FROM Transaction_Body T2
        WHERE T2.ItemsID = T.ItemsID
            AND T2.DateX = '2023-06-07'
            AND T2.ItemAmount < 0
    )
GROUP BY T.ItemsID;

此带有 NOT EXISTS 子句的子查询用于排除“ItemsID”与外部查询的“ItemsID”相同、“DateX”为“2023-06-07”且“ItemAmount”小于 0 的行。如果任何这样的行存在,它将在计算中被忽略

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