I have the problem when I want to add more CASES in my SQL but it seems SQL Server does not allow that.
What I want is that if BR.CUSTOMER_ID
is not 10000
and BR.CUSTOMER_ID
exists in [dbo].[LAMS_USER_METER]
then do the sum()
.
DECLARE @SELLING_WATER_RECORD_TABLE TABLE(
OBJECT_ID INT,
YEAR_MONTH INT,
SELLING_WATER DECIMAL(18,3),
IC_SELLING_WATER DECIMAL(18,3)
)
INSERT INTO @SELLING_WATER_RECORD_TABLE
SELECT AYMT.OBJECT_ID,AYMT.YEAR_MONTH,
--below has the error
SUM(CASE BR.RECORD_TYPE WHEN '10000' THEN 0 ELSE
CASE WHEN BR.CUSTOMER_ID IN (SELECT DISTINCT CUSTOMER_ID FROM [dbo].[LAMS_USER_METER])
THEN BR.READ_WATER
ELSE 0
END
END),
SUM(CASE BR.RECORD_TYPE WHEN '10000' THEN BR.READ_WATER ELSE 0 END),
FROM @AREA_YEAR_MONTH_TABLE AYMT
INNER JOIN [dbo].[AREA_BMMETER_CHECK] ABC
ON AYMT.OBJECT_ID=ABC.OBJECT_ID
INNER JOIN [dbo].[BM_METERINFO] BM
ON ABC.VIRTUAL_METER_ID=BM.VIRTUAL_METER_ID
INNER JOIN [dbo].[BM_RECORDINFO] BR
ON BM.CUSTOMER_ID=BR.CUSTOMER_ID AND BM.METER_ID=BR.METER_ID AND AYMT.YEAR_MONTH='202012'
GROUP BY AYMT.OBJECT_ID,AYMT.YEAR_MONTH;
select * from @SELLING_WATER_RECORD_TABLE
I find the solution to use LEFT JOIN
like this:
DECLARE @SELLING_WATER_RECORD_TABLE TABLE(
OBJECT_ID INT,
YEAR_MONTH INT,
SELLING_WATER DECIMAL(18,3),
IC_SELLING_WATER DECIMAL(18,3)
)
INSERT INTO @SELLING_WATER_RECORD_TABLE
SELECT AYMT.OBJECT_ID,AYMT.YEAR_MONTH,
SUM(CASE BR.RECORD_TYPE WHEN '10000' THEN 0 ELSE
CASE WHEN LUM.CUSTOMER_ID IS NOT NULL
THEN BR.READ_WATER
ELSE 0
END
END),
SUM(CASE BR.RECORD_TYPE WHEN '10000' THEN BR.READ_WATER ELSE 0 END)
)
FROM @AREA_YEAR_MONTH_TABLE AYMT
INNER JOIN [dbo].[AREA_BMMETER_CHECK] ABC
ON AYMT.OBJECT_ID=ABC.OBJECT_ID
INNER JOIN [dbo].[BM_METERINFO] BM
ON ABC.VIRTUAL_METER_ID=BM.VIRTUAL_METER_ID
INNER JOIN [dbo].[BM_RECORDINFO] BR
ON BM.CUSTOMER_ID=BR.CUSTOMER_ID AND BM.METER_ID=BR.METER_ID AND AYMT.YEAR_MONTH=BR.BILLING_MONTH
LEFT JOIN LAMS_USER_METER LUM
ON BR.CUSTOMER_ID = LUM.CUSTOMER_ID
GROUP BY AYMT.OBJECT_ID,AYMT.YEAR_MONTH;
select * from @SELLING_WATER_RECORD_TABLE
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.