Ich habe eine Abfrage, die eine Reihe von Zeilen zurückgibt. Aber die gleiche Abfrage würde Ich mag an: die Gesamtzeilenanzahl in der Tabelle
2. die Zeilennummer erhaltenSQL erhalten Einzelwert innerhalb der bestehenden Abfrage?
1. erhalten, wo ein certian Benutzername
Gerade jetzt im befindet tun wie so:
BEGIN
DECLARE @startRowIndex INT;
DECLARE @PageIndex INT;
DECLARE @RowsPerPage INT;
SET @PageIndex = 0;
SET @RowsPerPage = 15;
SET @startRowIndex = (@PageIndex * @RowsPerPage) + 1;
WITH messageentries
AS (SELECT Row_number()
OVER(ORDER BY score DESC) AS row,
Count(DISTINCT town.townid) AS towns,
user_details.username,
user_score.score,
allience.alliencename,
allience.allienceid,
allience.alliencetagname,
(SELECT Count(*) FROM user_details) AS numberofrows
FROM user_details
INNER JOIN user_score
ON user_details.username = user_score.username
INNER JOIN town
ON user_details.username = town.townownername
LEFT OUTER JOIN allience_roles
ON user_details.useralliencerole = allience_roles.roleid
LEFT OUTER JOIN allience
ON allience_roles.allienceid = allience.allienceid
GROUP BY user_details.username,
user_score.score,
allience.alliencename,
allience.allienceid,
allience.alliencetagname)
SELECT *, (SELECT row FROM messageentries WHERE username = 'myUsername') AS myself
FROM messageentries
WHERE row BETWEEN @startRowIndex AND @StartRowIndex + @RowsPerPage - 1
END
das funktioniert, ist aber nicht die beiden verschachtelten wählt einmal für jede Zeile in der Tabelle gehen laufen? :/
...
(SELECT Count(*) FROM user_details) AS numberofrows
...
(SELECT row FROM messageentries WHERE username = 'myUsername') AS myself
Also meine Frage ist, wie kann ich die Werte erhalten kann ich als „low-cost“ wie möglich und vorzugsweise in derselben Abfrage will?
Vielen Dank im Voraus :)
Yay, es funktioniert, aber irgendwie, wenn ich SELECT *, MyRowNumber.row AS selbst schreibe, bekomme ich zwei Spalten mit dem gleichen Wert, die Lösung war nicht MyRowNumber überhaupt zu wählen .. Wie der Wert dann in die Abfrage kommt Ich habe keine Ahnung, aber es funktioniert :) – Moulde