2013-10-09 32 views
1

假设我有如下表:有效的方式,从记录获得的唯一值

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 

但我严重怀疑这是否是最有效的方法。我需要建议。

+0

选择代码,名称,node_code,parent_code从测试组通过代码,名称,node_code,parent_code。这是我如何获得独特的价值,而不是使用不同的。尽管不知道最有效的方法。 – zundarz

回答

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

+0

感谢您的回答,但是这条SQL语句似乎是非常慢的200万条记录。以下SQL非常快(1秒): 选择一个代码, (从代码= a.code的测试中选择top 1的名称), (从test where code = a.code选择top 1节点代码), (从代码= a.code的测试中选择top 1 parent_code) from test order by a.code – nim

相关问题