Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 选择不重复的行_Sql_Sql Server - Fatal编程技术网

Sql 选择不重复的行

Sql 选择不重复的行,sql,sql-server,Sql,Sql Server,我只想选择唯一的行,不想重复。在本例中,我只希望返回4行。如何删除重复项 SELECT d.FirstName, d.LastName, d.DateOfBirth, d.Gender, d.SSN, d.Gender, d.Race, d.HobbyInterest, d.PhysicalDescription, pf.[No of Religious Donations] FROM (SELECT pf.*, COUNT

我只想选择唯一的行,不想重复。在本例中,我只希望返回4行。如何删除重复项

SELECT 
    d.FirstName, d.LastName, d.DateOfBirth, d.Gender, d.SSN, d.Gender, d.Race, 
    d.HobbyInterest, d.PhysicalDescription, pf.[No of Religious Donations]
FROM  
    (SELECT 
         pf.*, 
         COUNT(Religious) OVER (PARTITION BY Person_Id) as 'No of Religious Donations'
     FROM 
         vw_profileFact pf) pf
JOIN 
    vw_dossier d ON pf.Person_Id = d.Person_Id
WHERE 
    [No of Religious Donations] > 2
ORDER BY 
    [No of Religious Donations] DESC;

我有点困惑。为什么要使用窗口函数

SELECT d.*, pf.num_religious_donations
FROM vw_dossier d JOIN
     (SELECT p.person_id,
             COUNT(p.Religious) AS num_religious_donations
      FROM vw_profileFact p
      GROUP BY p.person_id
     ) pf
     ON pf.Person_Id = d.Person_Id
WHERE num_religious_donations> 2
ORDER BY pf.num_religious_donations DESC;

如果您想要每人一行,那么聚合是合适的。

我有点困惑。为什么要使用窗口函数

SELECT d.*, pf.num_religious_donations
FROM vw_dossier d JOIN
     (SELECT p.person_id,
             COUNT(p.Religious) AS num_religious_donations
      FROM vw_profileFact p
      GROUP BY p.person_id
     ) pf
     ON pf.Person_Id = d.Person_Id
WHERE num_religious_donations> 2
ORDER BY pf.num_religious_donations DESC;

如果您想要每人一行,那么聚合是合适的。

选择distinct…选择distinct d.FirstName、d.LastName?或者从SELECT DISTINCT pf.*,CountReligural中选择更好……在我看来,SELECT DISTINCT是非常糟糕的建议。这就像建议不要去想你在做什么。没有必要制作这些复制品,所以想办法避免这种情况。Gordon Linoff在他的回答中说明了这一点。另一方面:“没有宗教捐款”是无效的。单引号是字符串文字分隔符。在标准SQL中,别名使用双引号。在SQL Server中,您应该使用括号。@ThorstenKettner否,该SQL是正确的。虽然格式“alias”=表达式已被弃用,但允许字符串文字作为别名。是否选择distinct…选择distinct d.FirstName,d.LastName?或者从SELECT DISTINCT pf.*,CountReligural中选择更好……在我看来,SELECT DISTINCT是非常糟糕的建议。这就像建议不要去想你在做什么。没有必要制作这些复制品,所以想办法避免这种情况。Gordon Linoff在他的回答中说明了这一点。另一方面:“没有宗教捐款”是无效的。单引号是字符串文字分隔符。在标准SQL中,别名使用双引号。在SQL Server中,您应该使用括号。@ThorstenKettner否,该SQL是正确的。虽然格式“alias”=表达式已被弃用,但允许将字符串文字作为别名。我收到一个错误“文本数据类型无法选择为独立的,因为它不可比较”。@Mantastanionis:ntext、text和image数据类型将在SQL Server的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。改用nvarcharmax、varcharmax和varbinarymax@Mantastanionis-我已经编辑了它,我认为现在应该可以了,添加DISTINCT只是在这个查询中隐藏了一个问题,而不是解决它,即首先防止重复。我得到一个错误“文本数据类型不能被选择为DISTINCT,因为它不可比较”。@Mantastanionis:ntext,text,并且图像数据类型将在SQL Server的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。改用nvarcharmax、varcharmax和varbinarymax@Mantastanionis-我已经编辑了它,我认为现在应该可以了,添加DISTINCT只是在这个查询中隐藏了一个问题,而不是解决它,即首先防止重复。在我前面的问题中,你建议我使用windows函数。我没有想到我将如何处理这些数据。谢谢,这很有效。回答得好。我只会首先选择宗教捐款,然后立即应用计数条件:选择person_id,count*作为vw_Profile的num_宗教捐款事实上relegious不是空的,一组一组的person_id,count*>2。@Mantas Stanionis:谢谢,这很有效,然后单击此答案旁边的勾选符号接受此答案。@mantastanionis。你的上一个问题有不同的表述。窗口函数似乎适用于此。我不明白您想要每人一行。在我的上一个问题中,您建议我使用windows功能。我没有想到我将如何处理这些数据。谢谢,这很有效。回答得好。我只会首先选择宗教捐款,然后立即应用计数条件:选择person_id,count*作为vw_Profile的num_宗教捐款事实上relegious不是空的,一组一组的person_id,count*>2。@Mantas Stanionis:谢谢,这很有效,然后单击此答案旁边的勾选符号接受此答案。@mantastanionis。你的上一个问题有不同的表述。窗口函数似乎适用于此。我不明白你想要每人排一排。