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 内に移動し、 andia.typeの間から削除(または単純な CASE ステートメントに変更) し、以下を追加することだと思います。CASEWHENGROUP 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 に答える