Tom*_*m A 1 sql-server dynamic-sql
我的老板给了我一个我不确定可能的任务,因为大约两个星期后,我无法找到解决方案,所以我把它扔出来要求SO小组提供任何帮助.如果这打破了你的大脑,我道歉.
首先介绍一下:我们开发了一个数据库查询应用程序,允许用户从数据库中获取他们想要的任何内容,而无需了解任何SQL.
我的问题:我们想要自定义使用"Distinct"选项的方式.我们希望它仅应用于某些字段,而不是将distinct关键字应用于所选行,以便使用与字段匹配的第一行.举个例子:
Bob Jones,122 Main Street,Portland,OR
Sue Jones,122 Main Street,Portland,OR
Mary Smith,458 32nd Street,Portland,OR
Ralph Smith,458 32nd Street,Portland,OR
我们希望这个工作,以便只返回每个地址的第一行,如下所示:
Bob Jones,122 Main Street,Portland,OR
Mary Smith,458 32nd Street,Portland,OR
使用正常的distinct,将返回所有四行,这比我们想要的更多.有没有人对我们如何做到这一点有任何想法?谢谢.
WITH NumberedRows AS (
SELECT FirstName, LastName, Address,
ROW_NUMBER() OVER (PARTITION BY Address ORDER BY Id) as RowNumber
FROM Table
) SELECT FirstName, LastName, Address
FROM NumberedRows
WHERE RowNumber = 1;
Run Code Online (Sandbox Code Playgroud)
PARTITION BY Address指定要分组ORDER BY ID的列列表,并指示用于定义"第一个"项目的列列表.
(确保先前的语句以分号结束.)