很抱歉,如果标题有点令人困惑。但这就是我所面对的。我在下面运行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但未能找到解决方案。
答案 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