Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:如何在某些列上选择distinct_Sql_Sql Server_Qsqlquery - Fatal编程技术网

SQL:如何在某些列上选择distinct

SQL:如何在某些列上选择distinct,sql,sql-server,qsqlquery,Sql,Sql Server,Qsqlquery,我有一张像这样的桌子: +---+------------+----------+ |ID | SomeNumber | SomeText | +---+------------+----------+ |1 | 100 | 'hey' | |2 | 100 | 'yo' | |3 | 100 | 'yo' | <- Second occurrence |4 | 200 | 'ey' | |5

我有一张像这样的桌子:

+---+------------+----------+
|ID | SomeNumber | SomeText |
+---+------------+----------+
|1  | 100        | 'hey'    |
|2  | 100        | 'yo'     |
|3  | 100        | 'yo'     | <- Second occurrence
|4  | 200        | 'ey'     |
|5  | 200        | 'hello'  |
|6  | 200        | 'hello'  | <- Second occurrence
|7  | 300        | 'hey'    | <- Single
+---+------------+----------+
我不知道在这里该怎么办

我需要一些大致的东西:

SELECT t.ID, DISTINCT(t.SomeNumber, t.SomeText)  --this is not possible
FROM (
    SELECT mt.ID, mt.SomeNumber, mt.SomeText
    FROM MyTable mt
    GROUP BY mt.SomeNumber, mt.SomeText --can't without mt.ID
    HAVING COUNT(*) > 1
)

有什么建议吗?

使用带有行数和计数行的cte可以满足您的需要:

创建并填充样本表(请在以后的问题中保存此步骤):

查询:

;WITH cte as 
(
    SELECT id, 
           someNumber,
           someText, 
           ROW_NUMBER() OVER (PARTITION BY someNumber, someText ORDER BY ID) rn, 
           COUNT(id) OVER (PARTITION BY someNumber) rc
    FROM MyTable
)
SELECT id, someNumber, someText
FROM cte
WHERE rn = 1
AND rc > 1
结果:

id  someNumber  someText
1   100         hey 
2   100         yo  
4   200         ey  
5   200         hello

我删除了不兼容的数据库标记。请用您真正使用的数据库进行标记。为什么
100'hey'
会出现在您的结果集中,它是一个“单一的”?我需要所有的数字,除非它们只出现一个。如果文本在同一个数字上出现两次,那么只剩下一个。我真的需要研究一下
分区
函数。它有效-我想:)谢谢你,@zohar peledHi zohar,我有一个类似的问题,我不能理解
行数()分区的作用。
我有80列,我想在最后72列上gt distinct,前8列不包含PK或ID(这是一个视图),我无法决定在这两个分区语句中选择哪些列,您能帮我吗?Row_number()只需根据order by子句为每一行创建一个数字(如果指定了partition by,则为partition by)。如果指定了partition by,那么partition by子句中的每一组不同的值都会得到它自己的编号。看一看这个谢谢,这就是我想出来的:你能看一下吗?我不知道这是不是行,我没有样本数据,也没有想要的结果。您可能应该发布您自己的问题,以及示例数据和期望的结果。
;WITH cte as 
(
    SELECT id, 
           someNumber,
           someText, 
           ROW_NUMBER() OVER (PARTITION BY someNumber, someText ORDER BY ID) rn, 
           COUNT(id) OVER (PARTITION BY someNumber) rc
    FROM MyTable
)
SELECT id, someNumber, someText
FROM cte
WHERE rn = 1
AND rc > 1
id  someNumber  someText
1   100         hey 
2   100         yo  
4   200         ey  
5   200         hello