Interroga un singolo valore da una colonna che estrae più valori
Domanda
Utilizzando la seguente query:
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
Sto cercando di capire come afferrare QUALUNQUE valore di " resource_value " ;. Il problema è che mentre questo funziona per una serie di altre query, ho una tabella particolare che utilizza tipi di dati ntext invece di varchars (che non possono utilizzare la funzione MAX). Quindi sostanzialmente, MAX non funziona qui. Esiste un sostituto che posso usare su MS SQL Server 2005?
Ho bisogno che la colonna prodtree_element_name_l sia raggruppata, ma ho bisogno di un solo valore dalla colonna resource_value e non mi interessa quale sia poiché la maggior parte di essi è identica a prescindere (anche se alcuni non lo sono, quindi non posso raggrupparlo anche uno).
UPDATE:
Whoops, ho sbagliato, prodtree_element_name_l è ANCHE un NTEXT. Questo potrebbe aiutare un po ': p
Soluzione
Verrà visualizzata la prima voce casuale
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
Nota ??strong>
Nella tua query stai usando un JOIN SINISTRA ma anche un filtro sulla tabella unita a sinistra, limitando quindi il recordset. L'ho lasciato sul posto mentre pensavo che avrebbe cambiato i tuoi risultati ... ma non ha senso fare il LEFT JOIN.
Modifica
Sulla base del feedback nei commenti, ho commentato il gruppo e sono passato a un
distintoAltri suggerimenti
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
Ho ricevuto l'errore:
The data types ntext and varchar are incompatible in the not equal to operator.
A meno che non mi sia perso qualcosa?
Modifica: CHECK TOP.