如何选择不同的记录

时间:2014-02-25 09:24:51

标签: sql sql-server

在Sql server 2005上工作。想要选择不同的记录。基于一列喜欢:NID想获得不同的记录

贝娄图片详细描述

enter image description here

如果有任何疑问请咨询,先谢谢。

4 个答案:

答案 0 :(得分:1)

试试这个:

;with ff as 
(
    select ROW_NUMBER() OVER(PARTITION BY NID ORDER BY ID DESC) Num, *
    FROM Table1
)
SELECT * FROM ff WHERE Num = 1

答案 1 :(得分:1)

试试这个

;WITH CTE AS
(
SELECT
    ROW_NUMBER() OVER ( PARTITION BY FName,MName,Name ORDER BY ID) AS rno,
    FName,MName,Name,ID
FROM tableName
WHERE NID=10
)

SELECT * FROM CTE WHERE  rno=1

这将根据NID=10返回FName,MName,Name的不同记录。 即具有唯一FName,MName,Name

答案 2 :(得分:0)

尝试

DECLARE @NID INT 

SET @NID = 10; 

WITH nidgroup 
     AS (SELECT id, 
                name, 
                fname, 
                mname, 
                nid 
         FROM   people 
         WHERE  nid = @NID) 
SELECT * 
FROM   people 
WHERE  nid = @NID 
       AND name NOT IN (SELECT name 
                        FROM   nidgroup 
                        GROUP  BY name 
                        HAVING Count(*) > 1) 
       AND fname NOT IN (SELECT fname 
                         FROM   nidgroup 
                         GROUP  BY fname 
                         HAVING Count(*) > 1) 
       AND mname NOT IN (SELECT mname 
                         FROM   nidgroup 
                         GROUP  BY mname 
                         HAVING Count(*) > 1) 

注意当没有要返回的明确值时,PARTITION解决方案会返回false结果。尝试从表中删除第5行。

答案 3 :(得分:0)

这仅仅基于您的规范“为什么从输出列表中排除”和您的示例输出。

SELECT  ID
        Name ,
        Fname ,
        Mname ,
        NID
FROM    tableName
WHERE   NID = 10
        AND Name <> 'a'
        AND FName <> 'y'
        AND Mname <> 'gg'

我不确定你为什么要专门提出“不同”记录,因为使用你的示例数据,你只会获得1条记录,无论你是添加DISTINCT还是将其留下。

如果有更多行符合给定条件,则必须排除ID列 (如果它是主键)获取NameFnameMnameNID的不同值。然后它看起来像这样:

SELECT  DISTINCT
        Name ,
        Fname ,
        Mname ,
        NID
FROM    tableName
WHERE   NID = 10
        AND Name <> 'a'
        AND FName <> 'y'
        AND Mname <> 'gg'

到目前为止,所有其他给定的答案似乎都忽略了“为什么从输出列表中排除”中指定的条件。