Jag har en SQL-fråga som jag via ASP ställer mot en Access 2002-databas. Oj oj oj. Det var en fråga det. Hej Mikael. Hmm... återigen någon som inte har förstått fördelen med att använda SQLs eller Access inbyggda funktion för frågor... Skapa en fråga direkt i databasen som utför det du vill göra för att sedan i ASP bara anropa den färdigsorterade frågan. Det gör det SÅ mycket enklare att felsöka och använda. Om du sedan har en SQL-databas i botten så kommer frågan dessutom att vara färdigindexerad vid anropet och därmed så blir det minimala väntetider för användaren. Problem med sortering av SQL-fråga
Problemet är när jag ska sortera frågan efter kolumnen Promme så får jag upp ett felmeddelande men om jag sorterar efter id_user går det alldeles utmärkt.
Jättetacksam för all hjälp jag kan få!
<b>FUNGERANDE FRÅGA UTAN SORTERING</b>
SELECT TOP 10 id_user, ((((SELECT sum(Testvikt) FROM Enheter_transaktioner WHERE ID_Händelse = 1 AND ID_user = Händelse_kopplingar.ID_user) - (((SELECT Vikt FROM user_uppgifter WHERE user_uppgifter.ID = Händelse_kopplingar.ID_user) / 10) * ((Datediff('s', (SELECT TOP 1 datum_skapades FROM Enheter_transaktioner WHERE ID_Händelse = 1 AND Enheter_transaktioner.ID_user = Händelse_kopplingar.ID_user AND NOT isnull(aktuell_promille) ORDER BY Datum_skapades ASC), '"&DateAdd("h",6, now())&"'))/3600)))) / ((SELECT Vikt FROM user_uppgifter WHERE user_uppgifter.ID = Händelse_kopplingar.ID_user) * (SELECT IIF(kontrollv <1, 7.88, 5.85) FROM user_uppgifter WHERE user_uppgifter.ID = Händelse_kopplingar.ID_user))) AS Prommen FROM Händelse_kopplingar WHERE ID_Händelse=1 AND TYP=1 AND NOT isnull((SELECT TOP 1 ID FROM Enheter_transaktioner WHERE ID_Händelse = 1 AND Enheter_transaktioner.ID_user = Händelse_kopplingar.ID_user AND NOT isnull(Alkoholvolym) ORDER BY Datum_skapades DESC))
<b>DEN EJ FUNGERANDE FRÅGAN MED SORTERINGEN</b>
SELECT TOP 10 id_user, ((((SELECT sum(Testvikt) FROM Enheter_transaktioner WHERE ID_Händelse = 1 AND ID_user = Händelse_kopplingar.ID_user) - (((SELECT Vikt FROM user_uppgifter WHERE user_uppgifter.ID = Händelse_kopplingar.ID_user) / 10) * ((Datediff('s', (SELECT TOP 1 datum_skapades FROM Enheter_transaktioner WHERE ID_Händelse = 1 AND Enheter_transaktioner.ID_user = Händelse_kopplingar.ID_user AND NOT isnull(aktuell_promille) ORDER BY Datum_skapades ASC), NOW()))/3600)))) / ((SELECT Vikt FROM user_uppgifter WHERE user_uppgifter.ID = Händelse_kopplingar.ID_user) * (SELECT IIF(kontrollv <1, 7.88, 5.85) FROM user_uppgifter WHERE user_uppgifter.ID = Händelse_kopplingar.ID_user))) AS Prommen FROM Händelse_kopplingar WHERE ID_Händelse=1 AND TYP=1 AND NOT isnull((SELECT TOP 1 ID FROM Enheter_transaktioner WHERE ID_Händelse = 1 AND Enheter_transaktioner.ID_user = Händelse_kopplingar.ID_user AND NOT isnull(Alkoholvolym) ORDER BY Datum_skapades DESC))
ORDER BY
((((SELECT sum(Testvikt) FROM Enheter_transaktioner WHERE ID_Händelse = 1 AND ID_user = Händelse_kopplingar.ID_user) - (((SELECT Vikt FROM user_uppgifter WHERE user_uppgifter.ID = Händelse_kopplingar.ID_user) / 10) * ((Datediff('s', (SELECT TOP 1 datum_skapades FROM Enheter_transaktioner WHERE ID_Händelse = 1 AND Enheter_transaktioner.ID_user = Händelse_kopplingar.ID_user AND NOT isnull(aktuell_promille) ORDER BY Datum_skapades ASC), NOW()))/3600)))) / ((SELECT Vikt FROM user_uppgifter WHERE user_uppgifter.ID = Händelse_kopplingar.ID_user) * (SELECT IIF(kontrollv <1, 7.88, 5.85) FROM user_uppgifter WHERE user_uppgifter.ID = Händelse_kopplingar.ID_user)))
DESC
<b>FELMEDDELANDET</b>
syntax error. in query expression '((((SELECT sum(Testvikt) FROM Enheter_transaktioner WHERE ID_Händelse = 1 AND ID_user = Händelse_kopplingar.ID_user) - (((SELECT Vikt FROM user_uppgifter WHERE user_uppgifter.ID = Händelse_kopplingar.ID_user) / 10) * ((Datediff('s', 'Sv: Problem med sortering av SQL-fråga
Jag skulle verkligen rekommendera dig i detta fall att använda vyer/frågor i access. Alla dina underfrågor definierar du som vyer/frågor och sen ställer du andra frågor mot dessa vyer/frågor. Det gör att det i alla fall är läsbart. Tyvärr kan de inte ta emot variabler men det kanske inte behövs.
Exempel för dig som inte vet vad jag talar om:
Fråga1:
Select * From Kunder Where Region = 'Norr';
Fråga2:
Select * From Fråga1 Where KundNamn = 'Bosses skotrar';
Fråga 2 kommer vara returnera de kunder som heter Bosses skotrar i region Norr även om det skulle finnas fler i söder.
I ditt fall kommer det alltså att bli mer lättläst och därigenom också lättare att debugga. En bonus är att du slipper alla kombnationer som access gärna lägger ett par extra paranteser kring för att vara säker.
Hoppas du blir hjälpt
//Mikael SandSv:Problem med sortering av SQL-fråga
Tack för att du tagit dig tid att försöka hjälpa mig.
Jag ska titta närmare på det du föreslog men kan man inte använda sig av variabler för att sortera med i Access?Sv: Problem med sortering av SQL-fråga
SQL-anrop som endast hämtar information från databasen skall ytterst sällan ske direkt mot tabellen - du bör anropa färdiga frågor/procedures.