webForumDet fria alternativet

Join

6 svar · 1 006 visningar · startad av devotion

devotionMedlem sedan jan. 20012 711 inlägg
#1

Hej! :h

Har följande kod:

SELECT u.[Name], u.[Id], u.[Custom2] AS UserNormalTime, 
SUM(datediff(minute, [StartDate], [StopDate]))/60.0 AS CalculatedTime, 
SUM(t.time) AS TotalTime, 
CASE WHEN EXISTS 
( SELECT 1 FROM [tblUsers] 
INNER JOIN [tblTime] 
ON [tblUsers].[Name] = [tblTime].[User] 
WHERE [tblTime].[StartDate] > '2007-10-29' 
AND [tblTime].[StopDate] < '2007-11-04' 
AND [tblTime].[User] = u.[Name] 
AND ([tblTime].[Sign1By] IS NULL OR [tblTime].[Sign1By] = '') ) THEN 0 ELSE 1 END AS Sign1By 
FROM [tblUsers] 
u INNER JOIN [tblTime] t ON u.[Name] = t.[User] 
WHERE t.[StartDate] > '2007-10-29' 
AND t.[StopDate] < '2007-11-04' 
AND t.[Unit] = 'tim' 
GROUP BY u.[Name], u.[Id], u.[Custom2] 
ORDER BY u.[Name]

Nu vill jag koppla på en tabell till: [tblTimeType]

kopplingen är: tblTime.TimeTypeId = tblTimeType.Id

Det jag vill få fram från tblTimeType är: [DateType]

DBMS: MSSQL Express 2005

Får inte till det... :(

Mvh
Henrik :bire

LarsGMedlem sedan dec. 200012 465 inlägg
#2
SELECT u.[Name], u.[Id], u.[Custom2] AS UserNormalTime, dateType,
... 
FROM [tblUsers] 
u INNER JOIN [tblTime] t ON u.[Name] = t.[User] 
 inner join tbltimetype on t.TimeTypeId = tblTimeType.Id
...
GROUP BY u.[Name], u.[Id], u.[Custom2], dateType
...
devotionMedlem sedan jan. 20012 711 inlägg
#3

Hmm...

Får:

Invalid Column Name 'DateType'

SELECT u.[Name], u.[Id], u.[Custom2] AS UserNormalTime, DateType, 
SUM(datediff(minute, [StartDate], [StopDate]))/60.0 AS CalculatedTime, 
SUM(t.time) AS TotalTime, 
CASE WHEN EXISTS 
( SELECT 1 FROM [tblUsers] 
INNER JOIN [tblTime] 
ON [tblUsers].[Name] = [tblTime].[User] 
INNER JOIN [tblTimeType] 
ON t.[TimeTypeId] = [tblTimeType].[Id] 
WHERE [tblTime].[StartDate] > '2007-10-29' 
AND [tblTime].[StopDate] < '2007-11-04' 
AND [tblTime].[User] = u.[Name] 
AND ([tblTime].[Sign1By] IS NULL OR [tblTime].[Sign1By] = '') ) THEN 0 ELSE 1 END AS Sign1By 
FROM [tblUsers] u I
NNER JOIN [tblTime] t 
ON u.[Name] = t.[User] 
WHERE t.[StartDate] > '2007-10-29' AND t.[StopDate] < '2007-11-04' 
AND t.[Unit] = 'tim' 
GROUP BY u.[Name], u.[Id], u.[Custom2], DateType 
ORDER BY u.[Name]

Vad är fel? :)

Mvh
Henrik :bire

LarsGMedlem sedan dec. 200012 465 inlägg
#4

Du lade joinen på fel ställe, nu ligger den i subselecten och inte i from. Eller du kanske vill ha den på båda ställena?

devotionMedlem sedan jan. 20012 711 inlägg
#5

ahhh....

Just det, läste lite slarvigt... :r

Nu funkar det... Fast jag hade nog inte riktigt tänkt till ordentligt...

Anledningen till att jag ville få ut [DateType] är följande:

Jag har ett fält i databasen som heter [Time] detta summeras till [Totaltime] Sedan har jag två fält som heter: [StarDate] och [stopDate] dessa två beräknas till [CalculatedTime]

Problemet är om [DateTime] = 0, så är [StartTime] och [StartTime] 24 h (vilket inte stämmer)

Det jag vill göra är att om [DateTime] = 0 ska [CalculatedTime] vara samma som [TotalTime]

Går detta att göra? :)

mvh
Henrik

Peter SMedlem sedan dec. 20025 484 inlägg
#6

Hm, någonting sådant härnt kanske:

select u.name
     , u.custom2 usernormaltime
     , sum(time) totaltime
     , sum(case when datetype = 1 then datediff(minute, startdate, stopdate)/60.0 else time end) calculatedtime
     , CASE WHEN EXISTS ( SELECT 1 FROM [tblUsers] 
          INNER JOIN [tblTime] ON [tblUsers].[Name] = [tblTime].[User] 
          WHERE [tblTime].[StartDate] > '2007-10-29' 
               AND [tblTime].[StopDate] < '2007-11-04' 
               AND [tblTime].[User] = u.[Name] 
               AND ([tblTime].[Sign1By] IS NULL OR [tblTime].[Sign1By] = '') ) THEN 0 ELSE 1 END AS Sign1By
  from tblusers u
inner
  join tbltime t
    on u.name = t.user
inner
  join tbltimetype tt
    on t.timetypeid = tt.id
 where t.startdate > '2007-10-29'
   and t.stopdate < '2007-11-04'
   and t.unit = 'tim'
group
    by u.name
     , u.custom2
order
    by u.name

;)

devotionMedlem sedan jan. 20012 711 inlägg
#7

Funkar perfekt...

:e

Mvh
Henrik

Genererad på 368 ms · cache AV · v20260730165559-full.f96bc7eb