繁体   English   中英

SQL Server-按两列选择不同的行

[英]SQL Server - select distinct rows by two columns

我有以下格式

Name   someString     theValue 
abc    bla bla         3
abc    bla bla         3
abd    bla bla         5
abd    bla bla         5
xfz    ffs ds ds       50
xfz    ffs ds ds       50

预期结果:

Name   someString     theValue 
abc    bla bla         3
abd    bla bla         5
xfz    ffs ds ds       50

尝试使用此查询解决我的问题:

Select Name, someString, theValue count(*) FROM myTable
        GROUP BY Name, someString, theValue
          HAVING count(*) = 1

这里的逻辑是:在每行后面附加一个计数,然后仅选择每组行计数的第一个。

这会将我的结果从2160行缩小到40行,但是这里仍然有重复项。

我的问题是 :我在查询corect中使用的逻辑(用于按2列过滤掉重复的行),您是否会以其他方式编写此逻辑?

使用SQL Server 2012

谢谢

当然,您想做的是

SELECT DISTINCT Name, someString, theValue FROM myTable

或者,如果您需要知道发生了多少次,

SELECT Name, someString, theValue, Count(*) as ct FROM myTable GROUP BY Name, someString, theValue

根据您的预期输出,该查询可以简单地完成为

SELECT DISTINCT Name, someString, theValue
FROM myTable

结果集将具有Name,someString和theValue的不同组合。

如果您还想要每个组合的数量,则可以将其实现为

SELECT Name, someString, theValue, count(*) combination_count
FROM myTable
GROUP BY Name, someString, theValue

这可能是一个漫长的过程,但是有关该问题的所有论述都表明这些重复实际上不是重复。 也许有一些引起麻烦的尾随空格? 在这种情况下,应该可以执行以下操作: SELECT DISTINCT RTRIM(name), RTRIM(someString), theValue FROM myTable;

如果重复值是TheValue的问题,则可以尝试使用:

SELECT DISTINCT name, someString, first_value(theValue) over (partition by name, someString) FROM myTable;

您需要同时从select和group by语句中删除“ theValue”。

对于单个名称/ someStrings,您正确具有多个“ theValue”。

我建议使用简单的汇总作为最简单的方法:

select name, someString, min(theValue) as theValue
from t
group by name, someString;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM