![](/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.