SQL 按不同列选择整行

Posted

技术标签:

【中文标题】SQL 按不同列选择整行【英文标题】:SQL Select Entire Row by Distinct Columns 【发布时间】:2009-09-22 22:37:47 【问题描述】:

我需要一个 sql 语句,它允许我从 oracle 数据库中选择一整行,但按不同的列。这是一个简化的数据库:

    Project_Num    Title        Category
    0              Project 1    Admin
    0              Project 1    Development
    1              Project 2    Admin
    2              Project 3    Development

我需要我的语句返回以下结果集:

0     Project 1    Admin
1     Project 2    Admin
2     Project 3    Development

所以每个项目都是根据其 project_num 和 title 是否唯一来返回的。如果一个项目有 2 个以上类别不同的​​条目,我只需要选择一次该项目(我为该项目选择哪个条目并不重要)。

谁能帮帮我?

【问题讨论】:

【参考方案1】:
SELECT Project_Num, Title, MIN(Category) AS Category
FROM MyTable
GROUP BY Project_Num, Title;

【讨论】:

【参考方案2】:

您甚至需要在结果集中包含 Category 列吗?

如果没有,那么你可以使用:

SELECT DISTINCT Project_Num, Title
FROM MyTable

【讨论】:

【参考方案3】:
SELECT *
FROM (SELECT DISTINCT YourDistinctField FROM YourTable) AS A
CROSS APPLY 
( SELECT TOP 1 * FROM YourTable B 
  WHERE B.YourDistinctField = A.YourDistinctField ) AS NewTableName

我已经尝试了几个小时来解决这个问题,我尝试了很多不起作用的解决方案,最后通过搜索“加入前 1”并将我找到的解决方案调整为一个不同的搜索得到了它。

【讨论】:

以上是关于SQL 按不同列选择整行的主要内容,如果未能解决你的问题,请参考以下文章

sql server 按数字选择列

Excel根据某一列数据,自动分成多张表格

Access查询中按不同列功能选择列

SQL选择与连接列不同

SQL查询从键表中选择多个条目到同一行的不同列中

甲骨文:SQL;当且仅当一列更改时选择不同的记录