Sql server 获取sql中的非重复行

Sql server 获取sql中的非重复行,sql-server,duplicates,row,Sql Server,Duplicates,Row,我试图从数据库中获取不重复的行(主id除外),但我发现这样做有点困难,因为我正在焦急地构建查询,由于某种原因,它无法工作 假设我们有以下几点: id product_id claim_id 1 2 3 2 2 3 所以我只想得到一行 基本上,我的问题是: SELECT * FROM TABLE WHERE claim_id = 3 尝试按声明id和产品id将任一组附加到查询,但未成功。 您对此有什么想法吗?您可以添加独特的修饰符: SELEC

我试图从数据库中获取不重复的行(主id除外),但我发现这样做有点困难,因为我正在焦急地构建查询,由于某种原因,它无法工作

假设我们有以下几点:

id  product_id claim_id
1   2         3
2   2         3
所以我只想得到一行

基本上,我的问题是:

SELECT *
  FROM TABLE 
 WHERE claim_id = 3
尝试按声明id和产品id将任一组附加到查询,但未成功。
您对此有什么想法吗?

您可以添加
独特的
修饰符:

SELECT DISTINCT id, product_id, claim_id
FROM   mytable
WEHRE  claim_id = 3

有时您还需要获得一个ID。例如,如果希望只保存非重复项,但保留一个键以连接到另一个表。我喜欢为这样的任务使用窗口功能

SELECT X.ID, X.product_id, X.claim_id
FROM 
(
    SELECT 
            ROW_NUMBER() OVER (PARTITION BY Product_id, Claim_id ORDER BY ID) AS row_num,
            ID,
            product_id,
            claim_id
    FROM dbo.TABLE
) AS X
WHERE x.row_num = 1

仔细研究清楚。因此,它将从claim_id=3I的表中选择DISTINCT(product_id),id。我有一个复杂的查询,这是一种一般性的查询,基本上它会选择所有行,其中一些:$query=sprintf(“选择%s.*from%s%s%s%s;”@IleNea您的最后一个注释不是很有帮助。这是c(或任何语言)使用任何值生成tsql语句的代码。忘记查询是如何创建的,将重点放在生成正确结果集所需的查询上。一旦生成了正确结果集,就可以尝试将其放入应用程序中。此外,术语“非重复”对不同的人来说可能意味着不同的事情。一个好的起点是使用您提供的示例数据从数据库中确定您想要的结果集。