Reputation: 105
I am trying to include subquery in SELECT statement but get error:
"Cannot perform an aggregate function on an expression containing an aggregate or a subquery."
DECLARE @ShN money=STRLOG.dbo.fn_VarValue('ShN')
DECLARE @ShNs money=STRLOG.dbo.fn_VarValue('ShNs')
DECLARE @ShNN money=STRLOG.dbo.fn_VarValue('ShN') +STRLOG.dbo.fn_VarValue('ShNs')
DECLARE @ShD money=STRLOG.dbo.fn_VarValue('ShD')
SELECT sum(
CASE
WHEN GR2='33'
THEN @ShN
WHEN GR2='3'
THEN
CASE
-- find if next day is day off
WHEN EXISTS (SELECT * FROM tbl_Holidays WHERE [HolidayDate]=DATEADD("DAY",1,'2014.11.30'))
THEN @ShNs
ELSE @ShNN
END
ELSE @ShD
END
)/60,
tbl_Tabel.EmplCodeID
FROM tbl_TabelWHrs INNER JOIN tbl_Tabel ON tbl_TabelWHrs.TabWHrsID = tbl_Tabel.TabWHrsID
WHERE (tbl_TabelWHrs.TabMon='2014.12' AND tbl_Tabel.EmplCodeID='7040023' AND GR2 is not null)
GROUP BY tbl_Tabel.EmplCodeID;
Seems simple but I am very new to subqueries. Could you please somebody show me direction.
Upvotes: 0
Views: 2943
Reputation: 5745
Using inline queries is a bad practice in the most cases. There are no examples where you can not change it to the join, left join, subquery. And in 90% of the situations inline query will work worse.
Try to do something like that:
DECLARE @ShN money=STRLOG.dbo.fn_VarValue('ShN')
DECLARE @ShNs money=STRLOG.dbo.fn_VarValue('ShNs')
DECLARE @ShNN money=STRLOG.dbo.fn_VarValue('ShN') +STRLOG.dbo.fn_VarValue('ShNs')
DECLARE @ShD money=STRLOG.dbo.fn_VarValue('ShD')
SELECT sum(
CASE
WHEN GR2='33'
THEN @ShN
WHEN GR2='3'
THEN
CASE
-- find if next day is day off
WHEN th.SomeKey IS NOT NULL
THEN @ShNs
ELSE @ShNN
END
ELSE @ShD
END
)/60,
tbl_Tabel.EmplCodeID
FROM tbl_TabelWHrs INNER JOIN tbl_Tabel ON tbl_TabelWHrs.TabWHrsID = tbl_Tabel.TabWHrsID
LEFT JOIN tbl_Holidays th
ON [HolidayDate]=DATEADD("DAY",1,'2014.11.30')
WHERE (tbl_TabelWHrs.TabMon='2014.12' AND tbl_Tabel.EmplCodeID='7040023' AND GR2 is not null)
GROUP BY tbl_Tabel.EmplCodeID;
Upvotes: 1