@ndersMedlem sedan juni 200032 967 inläggEn tanke är att TOP inte har något syfte när man inte har ORDER BY., så du kan ju prova att ta bort "TOP 1" ur mitt kodförslag ovan.
I övrigt kan ditt DISTINCT-felmeddelande bero på att du använder en vanlig UNION, som ju per definition är DISTINCT. Använd UNION ALL istället, så borde du komma förbi det.
Edit: LarsG, mästaren på simultanpostning, eller är det jag det? ;) :bire
mvh
ZaimanMedlem sedan dec. 20014 239 inläggSELECT TOP 1 id2, image_text FROM tbl_Images WHERE id2 < 7 AND Gallery_name = 18 order by id2 desc
UNION ALL
SELECT TOP 1 id2, image_text FROM tbl_Images WHERE id2 = 7 AND Gallery_name = 18
UNION all
SELECT TOP 1 id2, image_text FROM tbl_Images WHERE id2 > 7 AND Gallery_name = 18 order by id2
Okej...
Fungerar i Access men ej i SQL Server 2000, SQL Server 2005
Det löser ju problematiken temporärt eftersom jag inte gjort resten färdig för SQL ännu.
SQL klagar på UNION ALL som ett syntax error.. mycket knasigt.
EemissionMedlem sedan dec. 19996 721 inlägg SQL Server gillar inte att man har ORDER BY före en UNION, men det går att lösa genom att bryta ut sökningarna i deriverade tabeller.
SELECT id2, image_text FROM (SELECT TOP 1 id2, image_text FROM tbl_Images WHERE id2 < 7 AND Gallery_name = 18 order by id2 desc) T
UNION ALL
SELECT id2, image_text FROM (SELECT TOP 1 id2, image_text FROM tbl_Images WHERE id2 = 7 AND Gallery_name = 18) T
UNION all
SELECT id2, image_text FROM (SELECT TOP 1 id2, image_text FROM tbl_Images WHERE id2 > 7 AND Gallery_name = 18 order by id2) T
Om du vill ha ut allt på en rad, så kan du använda subqueries. Dock får du bara ut id-numren på den föregående och nästa posten, men jag kan tänka mig att det är det som är intressant
SELECT i.ID,i.Gallery_name,(SELECT TOP 1 i2.ID FROM tbl_Images i2 WHERE i2.ID<i.ID AND i2.Gallery_name=i.Gallery_name ORDER BY i2.ID DESC) as PrevImage , (SELECT TOP 1 i3.ID FROM tbl_Images i3 WHERE i3.ID>i.ID AND i3.Gallery_name=i.Gallery_name ORDER BY i3.ID ASC) as NextImage
FROM tbl_Images i
WHERE i.id2 = 10 AND i.Gallery_name = 18
Vill man verkligen ha ut de andra kolumnerna också, så går det, genom att använda den ovanstående sökningen som en deriverad tabell, men vi kanske inte ska röra till det i onödan. :)