webForumDet fria alternativet

Incorrect syntar near Select

3 svar · 289 visningar · startad av Addeladde

AddeladdeMedlem sedan jan. 20013 406 inlägg
#1

Hej

Jag försöker göra om denna kod från att ha fungerat i Access men nu ska den fungera i MS SQL 2005 istället.

Select a.*, l.lektionDatum, 
(Case When cast(Select Count(*) 
from narvaro as n where a.anvandarID = n.anvandarID and l.lektionID = n.lektionID)) 
as decimal(10,2) > 0 
Then cast(Select n.narvaroTyp from narvaro as n 
where a.anvandarID = n.anvandarID and l.lektionID = n.lektionID) as decimal(10,2) 
Else cast(0) as decimal(10,2) End) as narvaro 
From anvandare a, lektioner as l, kursmedlemskap as km 
Where l.kursID = 184 
And km.kursID = 184 
And km.anvandarID = a.anvandarID 
And l.lektionDatum <= '2006-09-09 01:40:35' 
And a.anvandarTyp = 0 
Order by a.anvandarFornamn, a.anvandarEfternamn, l.lektionDatum ASC

Får felet incorrect syntax ner keyword Select.

emissionMedlem sedan dec. 19996 721 inlägg
#2

cast:en kräver en parentes, och det gör subselecten också.

Och varför casta till decimal? Värdet kan ju aldrig bli något annat än ett heltal.

Frågan borde bli mångfalt effektivare så här:

Select a.*, l.lektionDatum, isnull(n.narvarotyp,0) as narvaro
From anvandare a, lektioner as l, kursmedlemskap as km
left outer join narvaro n on a.anvandarID = n.anvandarID and l.lektionID = n.lektionI
Where l.kursID = 184 
And km.kursID = 184 
And km.anvandarID = a.anvandarID 
And l.lektionDatum <= '2006-09-09 01:40:35' 
And a.anvandarTyp = 0 
Order by a.anvandarFornamn, a.anvandarEfternamn, l.lektionDatum ASC

...men borde inte anvandare joinas ihop med kursmedlemskap, typ "a.anvandarId=km.anvandarId"?

AddeladdeMedlem sedan jan. 20013 406 inlägg
#3

Det får inte vara flera order by upptäckte jag.

AddeladdeMedlem sedan jan. 20013 406 inlägg
#4

emission skrev:

cast:en kräver en parentes, och det gör subselecten också.

Och varför casta till decimal? Värdet kan ju aldrig bli något annat än ett heltal.

Frågan borde bli mångfalt effektivare så här:

Select a.*, l.lektionDatum, isnull(n.narvarotyp,0) as narvaro
From anvandare a, lektioner as l, kursmedlemskap as km
left outer join narvaro n on a.anvandarID = n.anvandarID and l.lektionID = n.lektionI
Where l.kursID = 184 
And km.kursID = 184 
And km.anvandarID = a.anvandarID 
And l.lektionDatum <= '2006-09-09 01:40:35' 
And a.anvandarTyp = 0 
Order by a.anvandarFornamn, a.anvandarEfternamn, l.lektionDatum ASC

...men borde inte anvandare joinas ihop med kursmedlemskap, typ "a.anvandarId=km.anvandarId"?

Hej

Jag vill få fram den post i databasen där ett datum ligger närmast dagens datum. I första hand ska den öppna datum som kommer men finns inget sådant så ska den öppna ett tidigare datum.
http://www.webforum.nu/showthread.php?t=141079&highlight=union+lektion
Det funkade i Access men nu kör jag MS SQL

Min lösning verkar ändå ge samma poster som den gör i Access.
Visst decimal är grymt onödigt ska byta det.

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)