假设我有下表:
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 :(得分: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