SQL Server SUM() and group by with sub same name

bq9c1y66  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(98)

I've this data in my table
| Col1 | Col2 |
| ------------ | ------------ |
| master-milk | 100 |
| submaster-milk | 200 |
| master-coffee | 10 |
| submaster-coffee | 20 |

And I need to calculate SUM() of my milk and coffee Sum(milk) = 300 and sum(coffee) = 30

Select col1,sum(col1) as total from Table  
group by col1
vs3odd8k

vs3odd8k1#

You can use a common table expression (CTE) to first categorize the rows and then perform the SUM operation.

;WITH CTEData AS (
    SELECT 
        CASE 
            WHEN Col1 LIKE '%milk' THEN 'milk'
            WHEN Col1 LIKE '%coffee' THEN 'coffee'
            ELSE 'other'
        END AS DrinkType,
        Col2
    FROM YourTable
)
SELECT DrinkType, SUM(Col2) AS Total
FROM CTEData GROUP BY DrinkType;
cgvd09ve

cgvd09ve2#

You can use SUBSTRING to extract milk/coffee from the string :

SELECT SUBSTRING(Col1, CHARINDEX('-', Col1)+1, LEN(Col1)) as Col1, sum(Col2) as Total
FROM mytable
GROUP BY SUBSTRING(Col1, CHARINDEX('-', Col1)+1, LEN(Col1))
pcww981p

pcww981p3#

Another solution :

SELECT 
    CASE 
        WHEN Col1 LIKE '%milk' THEN 'milk'
        WHEN Col1 LIKE '%coffee' THEN 'coffee'
        ELSE 'other'
    END AS DrinkType,
    SUM(Col2) AS Total
FROM YourTable
GROUP BY  CASE 
        WHEN Col1 LIKE '%milk' THEN 'milk'
        WHEN Col1 LIKE '%coffee' THEN 'coffee'
        ELSE 'other'
    END

相关问题