消除GROUP BY SQL Query中的重复行

时间:2014-01-12 10:47:44

标签: sql

很抱歉,如果标题有点令人困惑。但这就是我所面对的。我在下面运行SQL查询

SELECT kodnegeri.KodNegeriText, kategorisukan.KategoriSukanText, COUNT(*) AS Total
FROM association 
INNER JOIN kodnegeri ON association.KodNegeri = kodnegeri.KodNegeri 
INNER JOIN kategorisukan ON association.KodKategoriSukan = kategorisukan.KategoriSukan 
GROUP BY kodnegeri.KodNegeriText, kategorisukan.KategoriSukanText

查询返回下表

    KodNegeriText | KategoriSukanText | Total
    Johor         | Sukan Kecergasan  | 16
    Johor         | Sukan Paralimpik  | 1
    Johor         | Sukan Prestasi..  | 227
    Johor         | ...               | ...
    Kedah         | Sukan Kecergasan  | 14
    Kedah         | Sukan Paralimpik  | 8
    Kedah         | ...               | ...

正如你在KodNegeriText下看到的,有重复的行(例如:柔佛)。如何消除重复的KodNegeriText项以获得仅显示KodNegeriText一次的结果。

实施例

KodNegeriText | KategoriSukanText | Total
Johor         | Sukan Kecergasan  | 16
              | Sukan Paralimpik  | 1
              | Sukan Prestasi..  | 227
              | ...               | ...
Kedah         | Sukan Kecergasan  | 14
              | ...               | ...

我尝试过使用DISTINCT但未能找到解决方案。

1 个答案:

答案 0 :(得分:0)

您的查询正在为您提供正确的结果。您打算通过将结果集存储在临时表中并在SELECT列表上应用一些技巧来实现。

对于SQL Server,

CREATE TABLE #temp(KodNegeriText varchar(100), KategoriSukanText varchar(100), Total int)

INSERT INTO #temp
SELECT kodnegeri.KodNegeriText, kategorisukan.KategoriSukanText, COUNT(*) AS Total,
FROM association 
INNER JOIN kodnegeri ON association.KodNegeri = kodnegeri.KodNegeri 
INNER JOIN kategorisukan ON association.KodKategoriSukan = kategorisukan.KategoriSukan 
GROUP BY kodnegeri.KodNegeriText, kategorisukan.KategoriSukanText


;WITH tempCTE AS
(

SELECT KodNegeriText , KategoriSukanText , Total ,
       Row_Number() OVER(PARTITION BY KodNegeriText ORDER BY KategoriSukanText,Total) as Rownum
FROM #temp

)

SELECT CASE WHEN Rownum=1 THEN  KodNegeriText ELSE '' END as KodNegeriText,KategoriSukanText , Total
FROM tempCTE 


drop table #temp