Запрос одного значения из столбца, который извлекает несколько значений - PullRequest
0 голосов
/ 16 октября 2008

Используя следующий запрос:

    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". Проблема в том, что, хотя это работает для ряда других запросов, у меня есть одна конкретная таблица, которая использует типы данных ntext вместо varchars (которые не могут использовать функцию MAX). В общем, MAX здесь не работает. Могу ли я использовать замену в MS SQL Server 2005?

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

UPDATE:

Ой, я был не прав, prodtree_element_name_l ТАКЖЕ NTEXT. Это может немного помочь: p

Ответы [ 3 ]

1 голос
/ 16 октября 2008

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

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, а также фильтр в левой объединенной таблице, что ограничивает набор записей. Я оставил это на месте, как я полагал, это изменит ваши результаты ... но нет смысла делать левое соединение.

EDIT

Основываясь на отзывах в комментариях, я закомментировал группу и переключился на отдельный

0 голосов
/ 16 октября 2008

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

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

Разве я что-то пропустил?

Редактировать: CHECK TOP.

0 голосов
/ 16 октября 2008
  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...