我有以下格式
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,但这里仍然有重复。
我的问题是:我在查询核心中使用的逻辑(用于过滤掉2列的重复行),你会用另一种方式写出来吗?
使用SQL Server 2012
谢谢
答案 0 :(得分:1)
你当然想做的是
SELECT DISTINCT Name, someString, theValue FROM myTable
或者如果你需要知道有多少次出现
SELECT Name, someString, theValue, Count(*) as ct FROM myTable GROUP BY Name, someString, theValue
答案 1 :(得分:1)
根据您的预期输出,此查询可以简单地完成
SELECT DISTINCT Name, someString, theValue
FROM myTable
resultset将具有Name,someString,theValue的独特组合。
如果您还想要计算每个组合的数量,那么您可以将其实现为
SELECT Name, someString, theValue, count(*) combination_count
FROM myTable
GROUP BY Name, someString, theValue
答案 2 :(得分:0)
这可能是一个很长的镜头,但你所写的关于这个问题的所有内容都表明这些副本实际上并不重复。也许有一些尾随空间会引起麻烦?在这种情况下,以下应该有效:
SELECT DISTINCT RTRIM(name), RTRIM(someString), theValue FROM myTable;
如果重复的问题与theValue有关,您可以尝试使用:
SELECT DISTINCT name, someString, first_value(theValue) over (partition by name, someString) FROM myTable;
答案 3 :(得分:0)
您需要从select和group by语句中删除“theValue”。
您为个别名称/ someStrings正确拥有多个“theValue”。
答案 4 :(得分:0)
我建议将简单聚合作为最简单的方法:
select name, someString, min(theValue) as theValue
from t
group by name, someString;