我有一张包含以下结构和数据的表......
email name address
abc@a.com ab us
abc@a.com de fr
xyz@x.com bv dc
efg@e.com cd mm
xyz@x.com bv dc
efg@e.com cd mm
我想在顶部显示基于电子邮件的不同行。例如,在上述情况下,结果应为:
email name address
abc@a.com ab us
xyz@x.com bv dc
efg@e.com cd mm
abc@a.com de fr
xyz@x.com bv dc
efg@e.com cd mm
我正在使用下面的查询,但它只会给我一个截然不同的结果,我需要所有排在顶部的行
select ROW_NUMBER() OVER(PARTITION BY email ORDER BY email DESC) AS RowNumber, email, name address where RowNumber = 1
答案 0 :(得分:2)
简单的方法......只需在ORDER BY子句中使用ROW_NUMBER ......
IF OBJECT_ID('tempdb..#TestData', 'U') IS NOT NULL
DROP TABLE #TestData;
CREATE TABLE #TestData (
email VARCHAR(10) NOT NULL,
[name] CHAR(2) NOT NULL,
[address] CHAR(2) NOT NULL
);
INSERT #TestData (email, [name], [address]) VALUES
('abc@a.com', 'ab', 'us'),
('abc@a.com', 'de', 'fr'),
('xyz@x.com', 'bv', 'dc'),
('efg@e.com', 'cd', 'mm'),
('xyz@x.com', 'bv', 'dc'),
('efg@e.com', 'cd', 'mm');
SELECT
*
FROM
#TestData td
ORDER BY
ROW_NUMBER() OVER (PARTITION BY td.email ORDER BY td.[name]);