Slightly different flavor with the addition of "valid groups" instead of hard coding which values to combine
😎
USE TEEST;
GO
SET NOCOUNT ON;
;WITH SAMPLE_DATA(StateID,DistrictID,CityID,Grp,VoteCount) AS
(
SELECT 1 AS StateID, 1 AS DistrictID, 1 AS CityID, 'Abc' As Grp, 10 AS VoteCount
UNION ALL SELECT 1, 1, 2, 'Bcd', 10
UNION ALL SELECT 1, 2, 1, 'Cde', 10
UNION ALL SELECT 2, 1, 2, 'Xyz', 5
UNION ALL SELECT 2, 1, 2, 'Wxy', 6
UNION ALL SELECT 2, 1, 2, 'Vwx', 3
)
,VALID_GROUPS(Grp) AS
(
SELECT CONVERT(VARCHAR(16),'Abc',0) UNION ALL
SELECT CONVERT(VARCHAR(16),'Bcd',0) UNION ALL
SELECT CONVERT(VARCHAR(16),'Cde',0)
)
,BASE_DATA AS
(
SELECT
SD.StateID
,SD.DistrictID
,SD.CityID
,ISNULL(VG.Grp,'Other') AS Grp
,SD.VoteCount
FROMSAMPLE_DATASD
LEFT OUTER JOIN VALID_GROUPSVG
ONSD.Grp=VG.Grp
)
SELECT
BD.StateID
,BD.DistrictID
,BD.CityID
,BD.Grp
,SUM(BD.VoteCount) AS VoteCount
FROMBASE_DATABD
GROUP BY BD.StateID
,BD.DistrictID
,BD.CityID
,BD.Grp;
Output
StateID DistrictID CityID Grp VoteCount
----------- ----------- ----------- ---------------- -----------
1 1 1 Abc 10
1 1 2 Bcd 10
1 2 1 Cde 10
2 1 2 Other 14