sql - 合并双行数据作为输出
问题描述
我有一个带有 Id 和名称的示例表,我想获得一个具有唯一 Id 和组合的一列名称(按 ID 分组)的新表。我的数据如下所示(SQL Server 2017 和 2019 - SSMS):
HouseId, Names
1, William
1, James
1, Mason
1, Ella
1, Jackson
1, Evelyn
2, Colton
2, Robert
3, Austin
3, Cooper
3, Parker
4, Daisy
5, Edward
5, River
我的目标是使用 qry 获得以下输出:
HouseId, Names
1, William, James, Mason, Ella, Jackson and Evelyn
2, Colton and Robert
3, Austin, Cooper and Parker
4, Daisy
5, Edward and River
有没有人有提示/建议如何在不通过 SQL 代码使其复杂化的情况下轻松做到这一点?houseid 的双精度值在 2 到 60 之间。
感谢你们对我的帮助!
解决方案
对的渴望and
使这变得非常棘手。您似乎关心名称的顺序 - 保留原始表的顺序。为了处理这个问题,我假设有一个排序列:
select houseid,
(case when count(*) = 1 then max(name)
else concat(string_agg(case when id <> max_id then name end, ', ') within group (order by id),
' and ',
max(case when id = max_id then name end)
)
end) as names
from (select t.*, max(id) over (partition by houseid) as max_id
from t
) t
group by houseid;
如果您没有这样的 id 来保留排序,则可以使用name
。结果具有您想要的格式,但如果没有排序列,则无法保留排序。
这是一个 db<>fiddle。
推荐阅读
- android - Android Room 数据库是单例的。为什么没有私有构造函数?
- fortify - 按需将代码上传到 Fortify 进行扫描是否安全?
- vue.js - 删除当前元素后 v-for 列表更新不正确
- mysql - 无法连接到本地主机中的 MySQL docker 容器
- javascript - 如何在 chome 应用程序的 tcp 套接字上接收和存储文件
- python - 如何防止观众在烧瓶上下载视频以及如何在源代码上隐藏视频网址或检查代码
- python - BaggingClassifier 意外关键字参数“max_depth”
- c# - 'WeatherModel.Root' 是在给定上下文中无效的类型
- python-3.x - python乘法精度
- flutter - 在后台播放音频