2014-01-12 177 views
0

对不起,如果标题有点混乱。但这就是我所面临的。我正在运行的SQL查询下面从GROUP BY 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但未能找到解决方案。

+2

你确定你想这样做在SQL?我会在报告或表格中做它,因为它不是数据。如果你这样做,我们需要知道哪些dbms,例如mysql,sql server等 –

+0

第4行和第6行可以在sql中完成if ...也与上面相同 –

+0

当然,我也想到了。但只是想知道是否可以直接从查询中完成,这将节省大量时间。这是mysql的顺便说一句 – mfmz

回答

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 
+0

会给这个尝试和更新,如果它的作品 – mfmz