使用 T-SQL 中的 OVER 子句在除一列之外的所有列上选择 DISTINCT

Posted

技术标签:

【中文标题】使用 T-SQL 中的 OVER 子句在除一列之外的所有列上选择 DISTINCT【英文标题】:Using the OVER clause in T-SQL to SELECT DISTINCT on all columns except one 【发布时间】:2016-10-19 21:08:47 【问题描述】:

我有一张带有 colA、colB、colC、colD 的表。我需要在除 colA 之外的所有列上选择 DISTINCT。我找到了一些示例来演示在 T-SQL 中使用 OVER 子句来实现这一点;但是,它们非常具体,因此很难应用于我的情况。任何人都可以提供任何见解,我们将不胜感激。

【问题讨论】:

SELECT DISTINCT colB, colC, colD FROM table? 请贴一些你已经尝试过的SQL语句。 如果需要选择a、b、c、d和b、c、d需要区分,为什么不直接select max(a), b, c, d from mytable group by b, c, d order by whatever; 【参考方案1】:

您可以使用 DENSE_RANK 两次,一次使用 ASC 顺序,另一次使用 DESC 顺序,然后将它们相加并减去 1。这样,您就得到了带有 OVER 子句的 SELECT DISTINCT。

【讨论】:

【参考方案2】:

您不必像 cmets 建议的那样使用 OVER 子句,使用 DISTINCT 或 GROUP BY。无论如何,要使用 OVER 子句,请检查

;WITH CTE AS
(
SELECT colB, colC, colD,ROW_NUMBER() OVER(PARTITION BY colB, colC, colD ORDER BY (SELECT 1)) RN FROM TABLE
)
SELECT colB, colC, colD FROM CTE WHERE RN=1

【讨论】:

以上是关于使用 T-SQL 中的 OVER 子句在除一列之外的所有列上选择 DISTINCT的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to Entities 中使用的 AddDays 在除一台服务器之外的所有服务器中引发错误

如何从python中的数组(或矩阵)中提取除一列之外的所有列?

如何使用 MySQL 查询从表中选择除一列之外的所有内容? [复制]

选择除一列之外的所有列[重复]

使用块读取大型csv文件时如何在连接块之前处理除一列之外的所有列

返回除一列中具有重复 ID 的行之外的所有列