You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中选取UserID与House唯一组合的查询需求

解决SQL Server中UserID与House唯一组合的查询问题

嘿,我来帮你搞定这个需求!你需要让查询结果里UserID和House的组合完全唯一,同时保留NumOfPpl和NumOfCars的任意对应值对吧?在SQL Server里有两种实用的方法,根据你的版本来选就行:

方法一:使用ROW_NUMBER()窗口函数(兼容所有主流版本)

这是最通用的方案,不管你的SQL Server版本是新是旧都能用。通过窗口函数给每个UserID+House分组的行编号,然后只取每组的第一行:

WITH RankedPeople AS (
    SELECT 
        UserID, 
        House, 
        NumOfPpl, 
        NumOfCars,
        -- 按UserID和House分组,给每组行随机编号(ORDER BY (SELECT NULL)表示不指定排序规则)
        ROW_NUMBER() OVER (PARTITION BY UserID, House ORDER BY (SELECT NULL)) AS RowNum
    FROM people
    -- 如果需要筛选特定颜色的房屋,在这里加WHERE条件,比如:WHERE HouseColor = '蓝色'
)
SELECT UserID, House, NumOfPpl, NumOfCars
FROM RankedPeople
WHERE RowNum = 1;

说明

  • PARTITION BY UserID, House:把相同UserID和House的行归为一组
  • ROW_NUMBER():给每组内的行分配唯一序号
  • ORDER BY (SELECT NULL):因为你只需要任意值,所以不需要指定排序逻辑,数据库会随机选一行返回

方法二:使用ANY_VALUE()函数(SQL Server 2022及以上版本)

如果你的SQL Server是2022或更新版本,这个方法更简洁,专门用来获取分组内的任意值:

SELECT 
    UserID, 
    House, 
    ANY_VALUE(NumOfPpl) AS NumOfPpl,
    ANY_VALUE(NumOfCars) AS NumOfCars
FROM people
-- 同样可以在这里加筛选条件,比如:WHERE HouseColor = '黄色'
GROUP BY UserID, House;

说明

  • GROUP BY UserID, House:确保结果中UserID和House的组合唯一
  • ANY_VALUE():从每组的对应列中随机返回一个值,完美匹配你“保留对应行任意值”的需求

内容的提问来源于stack exchange,提问作者Brad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:08:51