SELECT TOP 250
[tblTask].*
FROM
(tblTask inner join tblusers
on
tbltask.[user] = tblusers.[name])
inner join tblworkgroups
on
tblusers.Groupid = tblworkgroups.id
WHERE
1=1
AND
[tblWorkgroups].[Name]='Sigtuna'
AND (
([PlanStartDate]>='2008-09-03' AND [PlanStartDate]<'2008-09-04')
OR
([PlanStopDate]>'2008-09-03' AND [PlanStopDate]<'2008-09-04')
OR
([PlanStartDate]<='2008-09-03' AND [PlanStopDate]>='2008-09-04')
OR
([tblTask].[Id] IN
( SELECT [TaskId] FROM [tblTime] WHERE [StopDate]>'2008-09-03' AND [StopDate]<='2008-09-04')
)
)
Denna tar ca 10 sekunder att köra, men om jag tar bort det sista villkoret enligt neadstående kd, tar den mindre än en sekund...
Någon som har en aning?
SELECT TOP 250
[tblTask].*
FROM
(tblTask inner join tblusers
on
tbltask.[user] = tblusers.[name])
inner join tblworkgroups
on
tblusers.Groupid = tblworkgroups.id
WHERE
1=1
AND
[tblWorkgroups].[Name]='Sigtuna'
AND (
([PlanStartDate]>='2008-09-03' AND [PlanStartDate]<'2008-09-04')
OR
([PlanStopDate]>'2008-09-03' AND [PlanStopDate]<'2008-09-04')
OR
([PlanStartDate]<='2008-09-03' AND [PlanStopDate]>='2008-09-04')
)
SELECT TOP 250
[tblTask].*
FROM
((tblTask inner join tblusers
on
tbltask.[user] = tblusers.[name])
inner join tblworkgroups
on
tblusers.Groupid = tblworkgroups.id)
left join tblTime
on
tbltask.id = tbltime.taskid
WHERE
1=1
AND
[tblWorkgroups].[Name]='Sigtuna'
AND (
([PlanStartDate]>='2008-09-03' AND [PlanStartDate]<'2008-09-04')
OR
([PlanStopDate]>'2008-09-03' AND [PlanStopDate]<'2008-09-04')
OR
([PlanStartDate]<='2008-09-03' AND [PlanStopDate]>='2008-09-04')
OR
(tbltime.taskid is not null and tbltime.[StopDate]>'2008-09-03' AND tbltime.[StopDate]<='2008-09-04')
)
När det finns två tider (tblTime) på ett uppdrag, så visas två poster... Jag vill ju bara att det ska visas en post, även att det finns två tidposter som är kopplade....
Msg 421, Level 16, State 1, Line 1
Det går inte att markera datatypen text som DISTINCT eftersom den inte är jämförbar.
Msg 421, Level 16, State 1, Line 1
Det går inte att markera datatypen text som DISTINCT eftersom den inte är jämförbar.
Msg 421, Level 16, State 1, Line 1
Det går inte att markera datatypen text som DISTINCT eftersom den inte är jämförbar.
Msg 421, Level 16, State 1, Line 1
Det går inte att markera datatypen text som DISTINCT eftersom den inte är jämförbar.
Ett hett tips till framtiden är att välja varchar(max) i stället för text och nvarchar(max) i stället för ntext. Då kan coola saker som DISTINCT, GROUP BY och strängfunktioner användas.
Borde gå att kirra med en COUNT också. Skjuter från höften på halt vatten här men typ:
SELECT TOP 250
[tblTask].*
FROM
((tblTask inner join tblusers
on
tbltask.[user] = tblusers.[name])
inner join tblworkgroups
on
tblusers.Groupid = tblworkgroups.id)
left join tblTime
on
tbltask.id = tbltime.taskid
WHERE
[tblWorkgroups].[Name]='Sigtuna'
AND (
([PlanStartDate]>='2008-09-03' AND [PlanStartDate]<'2008-09-04')
OR
([PlanStopDate]>'2008-09-03' AND [PlanStopDate]<'2008-09-04')
OR
([PlanStartDate]<='2008-09-03' AND [PlanStopDate]>='2008-09-04')
OR
(tbltime.taskid is not null and tbltime.[StopDate]>'2008-09-03' AND tbltime.[StopDate]<='2008-09-04')
HAVING COUNT(tbltime.*) > 0
GROUP BY tbltask.*
Borde gå att kirra med en COUNT också. Skjuter från höften på halt vatten här men typ:
SELECT TOP 250
[tblTask].*
FROM
((tblTask inner join tblusers
on
tbltask.[user] = tblusers.[name])
inner join tblworkgroups
on
tblusers.Groupid = tblworkgroups.id)
left join tblTime
on
tbltask.id = tbltime.taskid
WHERE
[tblWorkgroups].[Name]='Sigtuna'
AND (
([PlanStartDate]>='2008-09-03' AND [PlanStartDate]<'2008-09-04')
OR
([PlanStopDate]>'2008-09-03' AND [PlanStopDate]<'2008-09-04')
OR
([PlanStartDate]<='2008-09-03' AND [PlanStopDate]>='2008-09-04')
OR
(tbltime.taskid is not null and tbltime.[StopDate]>'2008-09-03' AND tbltime.[StopDate]<='2008-09-04')
HAVING COUNT(tbltime.*) > 0
GROUP BY tbltask.*
Nä, det funkar inte...
Hur många tecken rymmer en Varchar(max) och hur mycket rymmer text? Vad är skillnaden i prestanda, att använda varchar(max) istället för text?