在Sql server 2005上工作。想要选择不同的记录。基于一列喜欢:NID想获得不同的记录
贝娄图片详细描述
如果有任何疑问请咨询,先谢谢。
答案 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
列
(如果它是主键)获取Name
,Fname
,Mname
和NID
的不同值。然后它看起来像这样:
SELECT DISTINCT
Name ,
Fname ,
Mname ,
NID
FROM tableName
WHERE NID = 10
AND Name <> 'a'
AND FName <> 'y'
AND Mname <> 'gg'
到目前为止,所有其他给定的答案似乎都忽略了“为什么从输出列表中排除”中指定的条件。