Hej Är det nåt sånt här du är ute efter? Nej inte riktigt. Jag känner mig lite låst vid case eftersom antalet kontor vilket egentligen är säljgrupper varierar, det bildas ny och andra försvinner). Ingetdera faktiskt. Det verkar hanteras i stored procedurn eller i koden på hemsidan. Hmmm ja du...Skriva om case when
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 Sv: Skriva om case when
CASE
WHEN officeID in (1) THEN 'Kontor 1'
WHEN officeID in (42) THEN 'Kontor 13'
WHEN officeID in (16, 15) THEN 'Nåt annat'
ELSE 'Defaultkontoret!'
END
ref
msdn.microsoft.com/en-us/library/ms181765.aspx
Om jag var du skulle jag nog kika på möjligheten att inte göra översättningen av officeID = 1 -> 'Kontor 1' i SQL:en utan istället sköta det i den anropande koden nånstans. Tycker jag känns mer naturligt i vart fall :)
Sv:Skriva om case when
Jag skulle vilja ha en fråga som är oberoden av hur många kontor det finns eller vad dom heter.
Det är en bra idé att lägga ut kontorsid och kontorsnamn i en egen tabell och hämta dom där.Sv:Skriva om case when
Så den borde lagras. I princip så är ID även namnet. Ettan, tvåan trean osv.
Vilket fungerar när man snackar om det men är mindre tydligt när man skrivet ut det.Sv: Skriva om case when
Nedanstående borde fungera enligt ditt koncept att bara lägga till texten "Kontor" på kontorsid.
Oavsett hur många kontor du har, eller lägger till/tar bort.
Men vill du ha mer kontroll över kontorsnamnen får du skapa en tabell där du lägger till dom.
Principiellt så är det en bra idé att alltid skriva ut aliaset framför kolumn/fält när man använder dom på tabeller. (alltså i ditt fall w och u)
Nu vet inte jag i vilken tabell kolumnerna/fälten hör hemma, så jag kunde inte skriva ut det,
överlåter det åt dig. :-)
OBS! Kan ha smygit sig in stav/syntaxfel.
<code>
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(thursday) + SUM(friday) AS total,
@weekmax AS week,
('Kontor ' + officeID) AS kontor
FROM WSU AS w
JOIN users AS u ON u.userid = w.userid
WHERE week = @weekmax AND [year] = year(getdate())
GROUP BY ('Kontor ' + officeID)
ORDER BY kontor DESC;
</code>