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

È stato utile?

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

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

distinto

Altri 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top