Jag vill räkna ut (summera) antal timmar man har jobbat i månadvis i ett år. Sparar ni datumen som strängar?? Hej OK, nu förstår jag lte mer. Tack för svaret Precis, som jag skrev i början så är det SQL Server 2005.Jämförelse
Sedan vill jag jämföra om de antal arbetade timmar är lika med de schemalagda timmar tex under månad och därefter resten av månaderna i ett år.
Om arbetadetimmar mindre än med de schemalagdatimmar
Gör något
Select något...
Om arbetadetimmar större än med de schemalagda timmar
Gör något
Select något...
Den select frågan kan jag bara få de totala arbetadetimmar och schemalagda timmar under året 2008
select month(datum),
sum(arbetadetimmar) as Arbetadetimmar,
sum(schemalagda) as Schemalagda
from tblSchema
where datum like '2008%' and PersonalID=5
group by month(datum),month(arbetadetimmar)
Sv: Jämförelse
Ger ett exempel (SQL Server 2005).
Har inte riktigt förstått vad du vill uppnå.
SELECT satsen efter THEN villkoret måste returnera ett unikt värde.
Vet inte om det är det du tänkt dig med dina SELECTer.
<code>
;WITH getHours AS
(
SELECT
MONTH(datum) AS Månad,
SUM(arbetadetimmar) AS Arbetadetimmar,
SUM(schemalagda) AS Schemalagda
FROM tblSchema
WHERE (datum LIKE '2008%') AND (PersonalID = 5)
GROUP BY MONTH(datum)
)
SELECT
Månad,
CASE WHEN Arbetadetimmar > Schemalagda THEN (SELECT something scalar [value])
WHEN Arbetadetimmar < Schemalagda THEN (SELECT something scalar [value])
WHEN Arbetadetimmar = Schemalagda THEN (SELECT something scalar [value])
ELSE (SELECT something entirely different scalar [value]) END
FROM getHours;
</code>Sv:Jämförelse
Jag kanske var lite otydligt. Jag sparar datum som sträng. Jag vill bara räkna ut bonus på
de anställda som har jobbat med sina arbetade timmar(alltså de schemalagda timmarna)
Bonusen som man kan få ut är 6000 kr/år
om schemalagdatimmar är 160/mån och man har jobbat alla sina timmar så får man 500 kr/månad
Men om man har jobbat mindre arbetadetimmar får man ingen bonus alls (0 kr)
Declare @Bonus float
Set @Bonus = 6000/12 (man får 500 kr/mån)Sv: Jämförelse
Kanske det här är närmare sanningen.
Lade in att man får bonusen om man jobbat sina schemalagda timmar, eller mer.
<code>
;WITH getHours AS
(
SELECT
PersonalID AS PersonalID,
SUM(arbetadetimmar) AS Arbetadetimmar,
SUM(schemalagda) AS Schemalagda
FROM tblSchema
WHERE (datum LIKE '2008%') AND (PersonalID = 5)
GROUP BY MONTH(datum)
)
SELECT
PersonalID,
SUM(CASE WHEN Arbetadetimmar >= Schemalagda THEN 500 ELSE 0 END) AS Bonus
FROM getHours
GROUP BY PersonalID;
</code>Sv:Jämförelse
Men jag kör SQL SERVER 2000 och den klagar på (;with)
jag får felmeddelande --Incorrect syntax near ';'.Sv: Jämförelse
Då gör vi en subquery istället.
<code>
SELECT
a.PersonalID,
SUM(CASE WHEN a.Arbetadetimmar >= a.Schemalagda THEN 500 ELSE 0 END) AS Bonus
FROM
(SELECT
PersonalID AS PersonalID,
SUM(arbetadetimmar) AS Arbetadetimmar,
SUM(schemalagda) AS Schemalagda
FROM @tblSchema
WHERE (datum LIKE '2008%') AND (PersonalID = 5)
GROUP BY MONTH(datum), PersonalID) a
GROUP BY a.PersonalID;
</code>