Microsoft SQL - 从查询结果中删除重复数据

时间:2013-01-18 15:29:05

标签: sql tsql

我是SQL Server的新手,需要我的一个SQL查询帮助。

我有2个表(RatingLikeDislike)。

我正在尝试使用这样的LEFT JOIN从这两个表中获取数据:

SELECT distinct LD.TopicID, R.ID, R.Topic, R.CountLikes, R.CountDisLikes, LD.UserName, LD.Clikes

FROM Rating As R

LEFT JOIN LikeDislike AS LD on LD.TopicID = R.ID

上述SELECT语句可以很好地显示结果,但也包含重复项。我希望在显示数据时删除重复项,我尝试使用DISTINCTGROUP BY,但没有运气,可能是因为我没有正确使用它。

为了更清晰,更少混淆,让我告诉你每张桌子到底做了什么,以及我想要达到的目的。

Rating表包含以下列(ID, Topic, CountLikes, CountDisLikes, Extra, CreatedByUser)。它存储主题信息和每个主题的喜欢和不喜欢的数量以及创建该主题的用户的UserID

带有样本数据的评级表

ID  Topic               CountLikes  CountDisLikes  Extra        CreatedByUser
1   Do You Like This       211          58          YesId                2
2   Or This                17           25          This also            3
79  Testing at home        1             0          Testing at home      2
80  Testing at home again  1             0          Testing              2
82  testing dislikes       0             1          Testing              2
76  Testing part 3         7             5          Testing 3            4
77  Testing part 4         16            6          Testing 4            5

LikeDisLike表包含以下列(ID, TopicID, UserName, Clikes)。 TopicIDID表中Rating列的FK。

具有样本数据的LikeDislike表

ID  TopicID UserName    Clikes
213     77      2       TRUE
214     76      2       FALSE
215     77      5       TRUE
194     77      3       TRUE
195     76      3       FALSE
196     2       3       TRUE
197     1       3       FALSE

现在我要做的是从这个表中获取信息而不重复行。我需要从Rating表中的UserName表+ ClikesLikeDislike列中获取所有列的数据,而不会有任何重复的行

以下是重复的结果

TopicID ID  Topic            CountLikes   CountDislikes UserName    Clikes
NULL    79  Testing at home    1           0             NULL       NULL
NULL    80  Testing at home2   1           0             NULL       NULL 
NULL    82  testing dislikes   0           1             NULL       NULL
1       1   Do You Like This   211         58            3          FALSE
2       2   Or This            17          25            3          TRUE
76      76  Testing part 3     7           5             2          FALSE
76      76  Testing part 3     7           5             3          FALSE
77      77  Testing part 4     16          6             2          TRUE
77      77  Testing part 4     16          6             3          TRUE
77      77  Testing part 4     16          6             5          TRUE

1 个答案:

答案 0 :(得分:0)

就像昨天的post一样,我不认为你明白DISTINCT会回报你的是什么。因为LikeDislike表中有不同的值,所以返回DISTINCT行。

我们以TopicId 77为例。它返回3个DISTINCT行,因为您的LikeDislike表中有3个匹配的记录。如果您想要的输出是一行,其中UserName和Clikes以逗号分隔,那么可以使用for xml,也许stuffhere是关于该主题的最新答案)。或者,如果要返回与TopicId匹配的第一行,那么这也是可能的 - 请查看使用带有row_number的子查询。

请告诉我们您想要的输出,我们可以提供解决方案。

祝你好运。