0

我需要一个查询,使用 CASE 语句根据 SQLite 的条件进行减法或加法。这是我目前的查询:

SELECT s.companyName, CASE ia.type 
                      WHEN ia.type='add' THEN SUM(ia.quantity) 
                      WHEN ia.type='subtract' THEN SUM(-ia.type) 
                      ELSE SUM(0) END AS total
FROM stocktake s 
LEFT JOIN stocktake_adjustment sa ON s.stocktakeId = sa.stocktakeId
LEFT JOIN adjustment a ON a.adjustmentId = sa.adjustmentId
LEFT JOIN inventory_adjustment ia ON ia.adjustmentId = a.adjustmentId
LEFT JOIN inventory i ON i.inventoryId = ia.inventoryId 
LEFT JOIN supplier s ON s.supplierId = i.supplierId 
WHERE s.supplierId = '4da99b63-fcb9-9b9f-8415-4896caeb920c'; 

基本上,如果条件是“加”,我想从总数中添加或减去如果条件是减去。

提前谢谢你们。

4

2 回答 2

2

将您CASE移入SUM

SELECT s.companyName, SUM(CASE ia.type 
                          WHEN ia.type='add' THEN ia.quantity
                          WHEN ia.type='subtract' THEN -ia.quantity 
                          ELSE 0 
                          END)
                      AS total
FROM stocktake s 
LEFT JOIN stocktake_adjustment sa ON s.stocktakeId = sa.stocktakeId
LEFT JOIN adjustment a ON a.adjustmentId = sa.adjustmentId
LEFT JOIN inventory_adjustment ia ON ia.adjustmentId = a.adjustmentId
LEFT JOIN inventory i ON i.inventoryId = ia.inventoryId 
LEFT JOIN supplier s ON s.supplierId = i.supplierId 
WHERE s.supplierId = '4da99b63-fcb9-9b9f-8415-4896caeb920c';

(我认为-ia.type在原来的问题是一个错字,真正的意思-ia.quantity

于 2013-01-21T20:55:32.027 回答
1

我认为您需要将 CASE 语句移动到 SUM 中,ia.typeCASEand之间删除WHEN(或更改为简单的 CASE 语句),并添加GROUP BY

SELECT  s.companyName, 
        SUM(CASE WHEN ia.type = 'add' THEN ia.Quantity 
                WHEN ia.type = 'subtract' THEN -ia.Quantity 
                ELSE 0 
            END) AS total
FROM    stocktake s 
        LEFT JOIN stocktake_adjustment sa 
            ON s.stocktakeId = sa.stocktakeId
        LEFT JOIN adjustment a 
            ON a.adjustmentId = sa.adjustmentId
        LEFT JOIN inventory_adjustment ia 
            ON ia.adjustmentId = a.adjustmentId
        LEFT JOIN inventory i 
            ON i.inventoryId = ia.inventoryId 
        LEFT JOIN supplier s 
            ON s.supplierId = i.supplierId 
WHERE   s.supplierId = '4da99b63-fcb9-9b9f-8415-4896caeb920c'
GROUP BY s.CompanyName; 
于 2013-01-21T20:57:59.040 回答