Wenn ich 'Bewertung' an den @sortBy Parameter übergeben, gibt es die Ergebnisse wie erwartet zurück. Wenn ich den Spaltennamen 'name' in der order by-Klausel fest codiere, gibt es die Ergebnisse wie erwartet zurück, aber bei Übergabe an den Parameter @sortBy gibt es Folgendes zurück: Fehler beim Konvertieren des Datentyps nvarchar in float.Reihenfolge nach Parameterwert in Fall Anweisung funktioniert nicht immer, aber wenn hart codiert es tut
Ich muss es funktionieren, wenn 'Name' übergeben wird.
DECLARE @sortBy varchar(255) = N'name',
@sortDirection varchar(4) = N'D'
SELECT *,
ROW_NUMBER() OVER(
ORDER BY -- name DESC
CASE WHEN @sortDirection = 'A' THEN
CASE
WHEN @sortBy = 'rating' THEN overallRating
WHEN @sortBy = 'name' THEN name
END
END ASC
, CASE WHEN @sortDirection = 'D' THEN
CASE
WHEN @sortBy = 'rating' THEN overallRating
WHEN @sortBy = 'name' THEN name
END
END DESC
) AS RowNumber INTO #Results
FROM
(
SELECT id
, type
, name
, formatted_address
, icon
, reference
, lat
, lng
, place_id
, open_now
, photo_reference
, width
, height
, html_attribution
, price_level
, CASE WHEN
(SELECT AVG(rating)
FROM reviews r
WHERE r.places_id = place_id
AND r.delete_check = 0) IS NOT NULL
THEN (
(SELECT AVG(rating)
FROM reviews r
WHERE r.places_id = place_id
AND r.delete_check = 0) + cast(rating as float))/2
ELSE
rating
END AS overallRating
from search_places
where search_id = 12
) y
SELECT COUNT(*) AS RecordCount FROM #Results
SELECT * FROM #Results WHERE RowNumber BETWEEN 1 AND 20
DROP TABLE #Results
@juan, danke ich wusste nicht über diese Seite. –
ja. Ich lerne darüber vor ein paar Wochen. Verwenden Sie auch www.sqlFiddle.com, denn wenn Sie die Daten dorthin kopieren, erstellt er die DDL für Sie. Aber in letzter Zeit gab es einige Probleme, also benutze jetzt beide. –