![](/img/trans.png)
[英]SQL Server Select Case Statement with two distinct Value in two Columns
[英]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.