从记录中获取唯一值的有效方法

时间:2013-10-09 02:08:11

标签: sql sql-server-2008

假设我有下表:

CREATE TABLE test(
id int identity not null primary key,
code nvarchar(50),
name nvarchar(50),
node_code nvarchar(50),
parent_node nvarchar(50),
prop1 int,
prop2 datetime,
prop3 nvarchar(50)
);

代码和名称是相关的,它们构成了属性的关键。因此该表可以包含以下数据:

CODE001 NAME001 [3 PROPS]
CODE001 NAME001 [3 PROPS]
CODE002 NAME002 [3 PROPS]
CODE002 NAME002 [3 PROPS]
...

我知道这不是一个好的设计,但我必须忍受它。

现在的问题是我想获取代码名称列表及其节点代码和父节点代码(节点代码对于代码和名称密钥是唯一的),但不是属性。我可以这样做:

select DISTINCT code, name, node_code, parent_code from test

但我真的怀疑这是否是最有效的方式。我需要建议。

1 个答案:

答案 0 :(得分:0)

你可以这样做:

SELECT code, name, node_code, parent_code ,prop1, prop2, prop3 FROM
(
    SELECT 
        ROW_NUMBER() OVER (PARTITION BY code, name, node_code, parent_code ORDER BY code, name, node_code, parent_code) AS RN,
        code, name, node_code, parent_code,prop1,prop2,prop3
    FROM test
) TEST2
WHERE TEST2.RN = 1

您可以详细了解这个here