devotionMedlem sedan jan. 20013 582 inlägg Hej!
Jag har följande sql-fråga, som summerar ett antal tidtyper
SELECT COALESCE(SUM(tblTime.[Time]),0) AS Hours
FROM tblcustomer
INNER JOIN tblTask ON tblCustomer.[Nr] = tblTask.CustomerNr
LEFT JOIN tblTime ON tblTask.[Id] = tblTime.TaskId
LEFT JOIN tblTimeType ON tblTimeType.[Id] = tblTime.TimeTypeId
WHERE tblCustomer.Category = 'Sigtuna'
And tblTime.StartDate >='2008-06-01 00:00:00.000'
And tblTime.StartDate < '2008-06-30 23:59:59.999'
And convert(varchar(8),startDate,8) between '07:30:00' and '16:30:00'
And
(
[tblTimeType].[Name] like '01%' Or
[tblTimeType].[Name] like '02%' Or
[tblTimeType].[Name] like '03%' Or
[tblTimeType].[Name] like '04%' Or
[tblTimeType].[Name] like '05%' Or
[tblTimeType].[Name] like '06%' Or
[tblTimeType].[Name] like '07%' Or
[tblTimeType].[Name] like '08%'
)
Summan blir: 926,14 timmar
Om jag tar bort den nedre where-delen enligt:
SELECT COALESCE(SUM(tblTime.[Time]),0) AS Hours
FROM tblcustomer
INNER JOIN tblTask ON tblCustomer.[Nr] = tblTask.CustomerNr
LEFT JOIN tblTime ON tblTask.[Id] = tblTime.TaskId
LEFT JOIN tblTimeType ON tblTimeType.[Id] = tblTime.TimeTypeId
WHERE tblCustomer.Category = 'Sigtuna'
And tblTime.StartDate >='2008-06-01 00:00:00.000'
And tblTime.StartDate < '2008-06-30 23:59:59.999'
And convert(varchar(8),startDate,8) between '07:30:00' and '16:30:00'
Så blir summan: 971,44 timmar
Differensen blir 45,3 timmar
Hur gör jag om ovanstående SQL-fråga, så att jag får ut 45,3 timmar?
Mvh
Henrik
Peter SMedlem sedan dec. 20025 483 inlägg Ställ båda frågorna och ta differensen mellan deras resultat ;)
Om vi vänder litet på det: Vad har de poster som utgör de 45,3 timmarna gemensamt? Kan vi hitta på en helt ny fråga utifrån vad vi vet om dessa?
devotionMedlem sedan jan. 20013 582 inlägg Hej!
Detta är gemensamt:
[tblTimeType].[Name] like '01%' Or
[tblTimeType].[Name] like '02%' Or
[tblTimeType].[Name] like '03%' Or
[tblTimeType].[Name] like '04%' Or
[tblTimeType].[Name] like '05%' Or
[tblTimeType].[Name] like '06%' Or
[tblTimeType].[Name] like '07%' Or
[tblTimeType].[Name] like '08%'
Dvs alla poster som inte matchas får träff på ovanstående!
Mbh
Henrik
Peter SMedlem sedan dec. 20025 483 inlägg Men enbart de villkoren ger inte en summa på 45,3. Frågan är vad posterna mer har gemensamt?
Annars kan du lösa det på t.ex. följande vis:
select sum(t.time) as foo
from tbltime t
where t.id in
(
SELECT tblTime.[id]
FROM tblcustomer
INNER JOIN tblTask ON tblCustomer.[Nr] = tblTask.CustomerNr
LEFT JOIN tblTime ON tblTask.[Id] = tblTime.TaskId
LEFT JOIN tblTimeType ON tblTimeType.[Id] = tblTime.TimeTypeId
WHERE tblCustomer.Category = 'Sigtuna'
And tblTime.StartDate >='2008-06-01 00:00:00.000'
And tblTime.StartDate < '2008-06-30 23:59:59.999'
And convert(varchar(8),startDate,8) between '07:30:00' and '16:30:00'
EXCEPT
SELECT tblTime.[id]
FROM tblcustomer
INNER JOIN tblTask ON tblCustomer.[Nr] = tblTask.CustomerNr
LEFT JOIN tblTime ON tblTask.[Id] = tblTime.TaskId
LEFT JOIN tblTimeType ON tblTimeType.[Id] = tblTime.TimeTypeId
WHERE tblCustomer.Category = 'Sigtuna'
And tblTime.StartDate >='2008-06-01 00:00:00.000'
And tblTime.StartDate < '2008-06-30 23:59:59.999'
And convert(varchar(8),startDate,8) between '07:30:00' and '16:30:00'
And
(
[tblTimeType].[Name] like '01%' Or
[tblTimeType].[Name] like '02%' Or
[tblTimeType].[Name] like '03%' Or
[tblTimeType].[Name] like '04%' Or
[tblTimeType].[Name] like '05%' Or
[tblTimeType].[Name] like '06%' Or
[tblTimeType].[Name] like '07%' Or
[tblTimeType].[Name] like '08%'
)
)
devotionMedlem sedan jan. 20013 582 inlägg Men, det som är gemensamt är ju att posterna INTE innehåller 01, 02, 03 osv...
Eller är jag trög? :)
Peter SMedlem sedan dec. 20025 483 inlägg I sådana fall är det följande du vill ha:
SELECT COALESCE(SUM(tblTime.[Time]),0) AS Hours
FROM tblcustomer
INNER JOIN tblTask ON tblCustomer.[Nr] = tblTask.CustomerNr
LEFT JOIN tblTime ON tblTask.[Id] = tblTime.TaskId
LEFT JOIN tblTimeType ON tblTimeType.[Id] = tblTime.TimeTypeId
WHERE tblCustomer.Category = 'Sigtuna'
And tblTime.StartDate >='2008-06-01 00:00:00.000'
And tblTime.StartDate < '2008-06-30 23:59:59.999'
And convert(varchar(8),startDate,8) between '07:30:00' and '16:30:00'
And [red]Not[/red]
(
[tblTimeType].[Name] like '01%' Or
[tblTimeType].[Name] like '02%' Or
[tblTimeType].[Name] like '03%' Or
[tblTimeType].[Name] like '04%' Or
[tblTimeType].[Name] like '05%' Or
[tblTimeType].[Name] like '06%' Or
[tblTimeType].[Name] like '07%' Or
[tblTimeType].[Name] like '08%'
)
devotionMedlem sedan jan. 20013 582 inlägg Ibland är lösningen enklare än man tror....
Tack! :)
Mvh
Henrik
devotionMedlem sedan jan. 20013 582 inlägg Hej igen!
Skulle man inte kunna få ut båda resultaten i samma fråga?
Mvh
Henrik