2013-01-21 24 views
0

我需要一个使用CASE语句根据SQLite条件进行减或添加的查询。这是我的时刻查询:在SQLite中使用CASE条件加总或减去

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'; 

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

先谢谢你们。

回答

1

将您CASESUM

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

+0

谢谢安东,正是我需要做的。 –

1

我想你需要的是回到屋里去的CASE语句SUM,请从CASEWHEN(或更改为简单的CASE语句)中删除ia.type,并且还要添加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; 
+0

谢谢Gareth,正是我在找的! –