2008-10-16 2 views
0

Используя следующий запрос:Запрос одного значения из столбца, который вытягивает несколько значений

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 

Я пытаюсь выяснить, как захватить любого из «resource_value». Проблема состоит в том, что, хотя это работает для ряда других запросов, у меня есть одна конкретная таблица, в которой вместо dvatates используются типы данных ntext (которые не могут использовать функцию MAX). Таким образом, MAX здесь не работает. Есть ли замена, которую я могу использовать на MS SQL Server 2005?

Мне нужно, чтобы столбец prodtree_element_name_l сгруппирован, но мне нужно только одно значение из столбца resource_value, и мне все равно, что это такое, поскольку большинство из них одинаково независимо (хотя некоторые из них не являются, следовательно, я не могу группировать это тоже).

UPDATE:

Упс, я был неправ, prodtree_element_name_l также NTEXT. Это может немного помочь: р

ответ

1

Это позволит получить первую случайную запись

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 

ПРИМЕЧАНИЯ

В запросе вы Ааре с помощью LEFT JOIN, но и фильтра на левой присоединились таблица, тем самым ограничивая набор записей. Я ЛЮБЛЮ, что на месте, как я полагал, это изменит ваши результаты ... но нет смысла делать LEFT JOIN.

EDIT

На основе обратной связи в комментариях, я закомментирована группы по и перешли к заметному

0
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 
0

я получил ошибку:

The data types ntext and varchar are incompatible in the not equal to operator. 

Если я не пропустил что-то?

Редактировать: ПРОВЕРИТЬ TOP.

+0

Является pe.prodtree_element_name_l также NTEXT? Если это возможно, вам нужен CAST на линии с условием не равных. – 2008-10-16 18:16:57

+0

Нет, prodtree_element_name_l является NVARCHAR, значение ресурса является единственным NTEXT – Organiccat 2008-10-16 18:21:35

Смежные вопросы