Abfrage einen einzigen Wert aus einer Spalte, die mehrere Werte zieht
Frage
Mit der folgenden Abfrage:
SELECT pe.prodtree_element_name_l, MAX(rs.resource_value) AS resource_value
FROM prodtree_element pe
LEFT JOIN resource_shortstrings rs
ON pe.prodtree_element_name_l_rk = rs.resource_key
WHERE rs.language_id = '5'
AND pe.prodtree_element_name_l <> ''
GROUP BY prodtree_element_name_l
Ich versuche, herauszufinden, wie man einen der „resource_value“ greifen. Das Problem ist, dass, während dies für eine Reihe von anderen Abfragen arbeitet, ich eine bestimmte Tabelle, die ntext-Datentypen anstelle von Varchars verwendet (die die MAX-Funktion nicht nutzen können). Also im Grunde ist MAX hier nicht arbeiten. Gibt es einen Ersatz ich auf MS SQL Server 2005 verwenden kann?
Ich brauche die prodtree_element_name_l Spalte gruppiert, aber ich brauche nur einen Wert aus der resource_value Spalte, und ist mir egal, was es ist, wie die meisten von ihnen identisch sind, unabhängig (obwohl einige nicht sind, daher kann ich nicht Gruppe, man als gut).
UPDATE:
Whoops, ich war falsch, ist prodtree_element_name_l auch eine NTEXT. Das könnte ein wenig helfen: p
Lösung
Dies wird den ersten Zufall Eintrag bekommt
SELECT DISTINCT
pe.prodtree_element_name_l,
(SELECT TOP 1 rs2.resource_value
FROM resource_shortstrings rs2
WHERE rs2.language_id = '5'
AND rs2.resource_key = pe.prodtree_element_name_l_rk) AS "resource_value"
FROM prodtree_element pe
LEFT JOIN resource_shortstrings rs
ON pe.prodtree_element_name_l_rk = rs.resource_key
WHERE rs.language_id = '5'
AND pe.prodtree_element_name_l IS NOT NULL
--GROUP BY prodtree_element_name_l
Hinweis
In Ihrer Anfrage aare Verwenden Sie ein LEFT JOIN, sondern auch einen Filter auf der linken Seite verknüpften Tabelle, also die Datensatzgruppe zu begrenzen. Ich verließ das an Ort und Stelle, wie ich dachte, es wäre Ihre Ergebnisse ändern ... aber es wird die LEFT JOIN nicht darauf zu tun.
Bearbeiten
Basierend auf dem Feedback in den Kommentaren, ich kommentierte die Gruppe heraus durch und wechselte zu einem deutlichen
Andere Tipps
SELECT pe.prodtree_element_name_l, MAX(CAST(rs.resource_value AS NVARCHAR(MAX))) AS resource_value
FROM prodtree_element pe
LEFT JOIN resource_shortstrings rs
ON pe.prodtree_element_name_l_rk = rs.resource_key
WHERE rs.language_id = '5'
AND pe.prodtree_element_name_l <> ''
GROUP BY prodtree_element_name_l
Ich habe den Fehler:
The data types ntext and varchar are incompatible in the not equal to operator.
Wenn ich etwas verpasst?
Edit:. PRÜFEN TOP