如何在 SQl Server 2008 中选择不同的但仅从众多字段中选择一个? [英] How to select distinct in SQl Server 2008 but for only one field out of many?

查看:26
本文介绍了如何在 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) 

如何只选择不同的 content_name?

How do I select only the distinct content_name?

推荐答案

你这样做:

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

那么为什么这不能回答您的问题?

So why does this not answer your question?

让我们考虑以下数据(仅前两列):

Let's consider the following data (just the first two columns):

content_name      Name
 XXXXX            1234
 XXXXX            5678

SELECT DISTINCT 意味着您只需要一行,但是您想要什么名称?

SELECT DISTINCT implies you only want one row, but what do you want for Name?

您需要做的是重写代码以使用 GROUP BY 并为其他列选择适当的聚合函数:

What you need to do is rewrite the code to use GROUP BY and pick the appropriate aggregate function for the other columns:

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

现在,这可能也不会产生您想要的结果,但有一件事是肯定的,您不能欺骗数据库引擎只是选择要返回的行之一,我不在乎是哪一行."

Now, likely this does not produce what you want either, but one thing is for certain, you can not trick the database engine to just "pick one of the rows to return, I don't care which one."

这篇关于如何在 SQl Server 2008 中选择不同的但仅从众多字段中选择一个?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆