SQL求和里面的值

时间:2018-06-21 02:20:16

标签: mysql sql

我有这种结果,但我想对值中的一些值求和。对不起我的英语不好。请参考图片以获得更好的理解。

Before sum up

预期结果:

Expected Result

我的SQL查询:

     SELECT
            itmnocate.Source as Local,
            itmnocate.GradeCategory,
            sum(sales_data.QUANTITY/1000) AS UnitMT
       FROM
            sales_data
 INNER JOIN itmnocate 
         ON sales_data.ITEM = itmnocate.ItemNumber
      WHERE
            sales_data.unit = 'KG'
        AND
            sales_data.CUSTOMERACCOUNT not in ('CT1008','CT1009')
        AND itmnocate.Source in ('local','by product')
   GROUP BY itmnocate.GradeCategory

2 个答案:

答案 0 :(得分:1)

WITH your_query
 AS (SELECT 'BY PRODUCT' AS local,
            'BY PRODUCT' AS "GradeCategory 1",
            3380.59 AS unitmt

     UNION ALL
     SELECT 'LOCAL' AS local,
            'LOCAL OTHERS' AS "GradeCategory 1",
            2754.19 AS unitmt

     UNION ALL
     SELECT 'LOCAL' AS local,
            'SUPER 15' AS "GradeCategory 1",
            19598.17 AS unitmt

     UNION ALL
     SELECT 'LOCAL' AS local,
            'TENDER/RAMPASAN' AS "GradeCategory 1",
            53.65 AS unitmt
     )
select MAX(local), sub_category,SUM(unitmt) from (SELECT local,
   "GradeCategory 1",
   unitmt,
   CASE "GradeCategory 1" WHEN 'SUPER 15' THEN 'SUPER 15' ELSE 'LOCAL 
OTHERS' END
       AS sub_category
 FROM your_query) processd_data  group by sub_category

答案 1 :(得分:0)

您可以使用CASE表达式来执行新操作,以计算新的类别值:

SELECT 'LOCAL' as Local,
       (CASE WHEN i.GradeCategory = 'SUPER 15' THEN 'SUPER 15'
             ELSE 'OTHERS'
        END) as Cat,
       SUM(s.QUANTITY/1000) AS UnitMT
FROM sales_data s INNER JOIN
     itmnocate i
     ON s.ITEM = i.ItemNumber
WHERE s.unit = 'KG' AND
      s.CUSTOMERACCOUNT NOT IN ('CT1008', 'CT1009') AND
      i.Source in ('local', 'by product')
GROUP BY cat;