Как выбрать отдельный в SQl Server 2008, но только для одного поля из многих?

У меня есть запрос:

SELECT Content.content_name, Language2.Name, Language2.language_id, 
Content.id, Content.content_description, 
FROM Language AS Language2 
LEFT JOIN contents AS Content ON (Language2.language_id = Content.language_id) 

Как выбрать только отдельное имя_контента?

Ответ 1

Вы делаете это:

SELECT DISTINCT Content.content_name
FROM Language AS Language2 
LEFT JOIN contents AS Content ON (Language2.language_id = Content.language_id)

Итак, почему это не отвечает на ваш вопрос?

Рассмотрим следующие данные (только первые два столбца):

content_name      Name
 XXXXX            1234
 XXXXX            5678

SELECT DISTINCT подразумевает, что вам нужна только одна строка, но что вы хотите для имени?

Что вам нужно сделать, это переписать код для использования GROUP BY и выбрать соответствующую функцию агрегации для других столбцов:

SELECT
    Content.content_name,
    MIN(Language2.Name) AS Name,
    MIN(Language2.language_id) AS language_id, 
    MIN(Content.id) AS id,
    MIN(Content.content_description) AS content_description, 
FROM
    Language AS Language2 
    LEFT JOIN contents AS Content
        ON (Language2.language_id = Content.language_id) 
GROUP BY
    Content.content_name

Теперь, скорее всего, это не приведет к тому, что вы хотите, но одно можно сказать наверняка, вы не можете обмануть механизм базы данных, чтобы просто "выбрать одну из строк для возврата, мне все равно".

Ответ 2

WITH    q AS
        (
        SELECT  Content.content_name, Language2.Name, Language2.language_id, Content.id, Content.content_description, ROW_NUMBER() OVER (PARTITION BY content_name ORDER BY language_id) AS rn
        FROM    Language Language2
        LEFT JOIN
                Contents AS Content
        ON      Language2.language_id = Content.language_id
        )
SELECT  *
FROM    q
WHERE   rn = 1

Ответ 3

Вы имеете в виду что-то вроде следующего

SELECT Content.content_name, 
FROM Language AS Language2 
LEFT JOIN contents AS Content ON (Language2.language_id = Content.language_id)
Group by Content.content_name