如何进行选择以过滤出重复项而不进行分组?我希望它们全部单独显示吗?

时间:2019-04-02 11:13:50

标签: sql

我在数据库中有一些数据,这些数据被分类到一个文本列中,每个文本项都有一个单独的标识符,而每个文本列都有一个语言。

 SELECT Text, Language, COUNT(*)
 FROM TableA
 WHERE Language = 'English'
 GROUP BY Text, Language 
 HAVING COUNT(*) > 1 

此查询为我提供了我需要的数据列表,但是我遇到了2个问题,将其分组,结果显示为:

|    Text    | Language | Amount Counted  |
|------------|----------|-----------------|
| Hello Text | English  |               5 |

问题是我可以根据文本排序以进行计数,但是我不知道如何在其中添加唯一标识符并将其作为一个大列表列出?例如,文本“ Hello”可能在5次列表中,我将在上面列出。但是,每个版本的hello都有不同的ID值也许Hello的第一个版本是(ID 232),第二个版本是(ID 546)如何添加同一表中的ID值,并仅列出所有重复的ID他们的ID值?

所以我会得到一个例子:

|      Text      | Language | ID   |
|----------------|----------|------|
| Hello Text     | English  |  232 |
| Hello Text     | English  |  546 |
| Hello Text     | English  |  643 |
| Hello Text     | English  |  745 |
| Hello Text     | English  | 1353 |
| Other Text     | English  |  343 |
| Other Text     | English  |  433 |
| Different Text | English  |  433 |
| Different Text | English  |  437 |
| Different Text | English  |  563 |
| Different Text | English  |  898 |

1 个答案:

答案 0 :(得分:1)

您只需要窗口功能吗?

SELECT text, language, id
FROM (SELECT a.*, COUNT(*) OVER (PARTITION BY Text) as cnt
      FROM TableA a
      WHERE Language = 'English'
     ) a
WHERE cnt > 1
ORDER BY id;