使用 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 查询从表中选择除一列之外的所有内容? [复制]