Vinnaren i pepparkakshustävlingen!
2011-02-24, 12:46
  #1
Medlem
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
Citera
2011-02-24, 13:01
  #2
Moderator
Protons avatar
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.officeIdtbl2.* FROM WSU tbl1
INNER JOIN
(
select officeIdsum(monday) as monday,sum(tuesday) as tuesday,sum(wednesday) as wednesday,sum(thursday) as thursday,sum(friday) as fridaysum(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?
Citera
2011-02-24, 13:03
  #3
Moderator
Protons avatar
Kan hända att det finns nåt syntaxfel i den där SQL-en. Det du ska koncentrera dej på i första läget är då att få den inre SQL-en att fungera felfritt. Får du till den biten borde resten vara väldigt simpelt att få till.
Citera
2011-02-24, 13:45
  #4
Medlem
Jag förstår hur du tänker. Jag testar att köra vidare på den
/tack
Citera
2011-02-24, 14:07
  #5
Moderator
Protons avatar
Glöm bara inte att presentera den färdiga lösningen sen
Citera
2011-02-24, 15:09
  #6
Medlem
Brist på tålamod så la jag till ett villkor till i case satsen. Ska skriva om den när jag inte är så stressad.
Tack för hjälpen
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback