Citat:
Ursprungligen postat av skorven
Hej
Jag har kört fast i en fråga. Jag har en fråga som ser ut som följer.
Hur ska jag göra för att skriva om den om jag har flera kontor? Då kan man väl inte använda case when?
Låt säga att jag har kontor1, kontor2 och kontor3 som ska summeras och grupperas för senaste veckan.
Så här har jag gjort för att hantera två kontor
declare @weekmax int
select @weekmax = max(week) from WeeklySalesUser where [year] = year(getdate())
select sum(monday) as monday,sum(tuesday) as tuesday,sum(wednesday) as wednesday,sum(thursday) as thursday,sum(friday) as friday, sum(monday)+sum(tuesday)+sum(wednesday)+sum(thursd ay)+sum(friday) as total, @weekmax as week,
case when officeID in (1) then 'Kontor 1' else 'Kontor 2' end as kontor
from WSU as w join users as u on u.userid = w.userid
where week = @weekmax
and [year] = year(getdate())
group by case when officeID in (1) then 'Kontor 1' else 'Kontor 2' end
@weekmax,
order by case when officeID in (1) then 'Kontor 1' else 'Kontor 2' end desc
Hoppas någon kan hjälpa mig när jag kört fast
Din case är en ganska klumpig konstruktion i sammanhanget, precis som du upptäckt så blir det ju rätt fult rätt snabbt när du har flera kontor, dessutom måste du ändra SQL-en varje gång. Här kommer mitt förslag:
Kod:
SELECT tbl1.officeId, tbl2.* FROM WSU tbl1
INNER JOIN(
select officeId, sum(monday) as monday,sum(tuesday) as tuesday,sum(wednesday) as wednesday,sum(thursday) as thursday,sum(friday) as friday, sum(monday)+sum(tuesday)+sum(wednesday)+sum(thursday)+sum(friday) as total
FROM WSU
GROUP BY officeID) tbl2 ON tbl1.officeId = tbl2.officeId
ORDER BY tbl1.officeId
Där har du väl en början iaf?