sql - SQL Server STRING_AGG 和 group by 用于一个表中的列,但不用于另一个表中的列
问题描述
标题可能无法很好地描述问题。
我正在使用Microsoft Pubs数据库。目标是显示所有标题及其作者姓名和出版商。所以,我想出了这个:
select dt.title, STRING_AGG(CONCAT(da.au_fname, ' ', da.au_lname), ', ') as 'author name', dp.pub_name
from dbo.titles dt
left join dbo.titleauthor dta on dta.title_id = dt.title_id
left join dbo.authors da on da.au_id = dta.au_id
left join dbo.publishers dp on dp.pub_id = dt.pub_id
group by dt.title;
然后很快意识到它不会起作用,因为 whileda.au_fname
和da.au_lname
都与dt
through相关联dta
,直接dp.pub_name
与相关联。每个标题只有一个出版商,所以必须有一个解决方案,对吧?dt
谢谢你。
解决方案
如果我理解正确,只需添加pub_name
即可group by
:
select dt.title,
STRING_AGG(CONCAT(da.au_fname, ' ', da.au_lname), ', ') as authors,
dp.pub_name
from dbo.titles dt left join
dbo.titleauthor dta
on dta.title_id = dt.title_id left join
dbo.authors da
on da.au_id = dta.au_id left join
dbo.publishers dp
on dp.pub_id = dt.pub_id
group by dt.title, dp.pub_name;
或者,您可以保持group by
原样并在以下位置使用聚合函数select
:
select dt.title,
STRING_AGG(CONCAT(da.au_fname, ' ', da.au_lname), ', ') as authors,
max(dp.pub_name)
推荐阅读
- virtual-machine - ESXi 6.5 Web UI 中的“虚拟硬件”选项卡上的“SCSI 设备”不可用
- python - 如何用 sastrawi 词干印尼语单词
- javascript - 如何使用 javascript 打开一个新标签并显示一些图表
- python - Matplotlib 图在更新 Raspberry Pi OS 后没有响应
- python-3.x - 从包含转义序列的文本中编码表情符号
- ruby - 如果调用==方法吗?
- r - R for 带有 if 子句的循环 - 在 dplyr 中可能吗?
- electrode-native - 可以同时启动多少个电极小程序
- react-native-ios - 方法 RCTAppState 中的未知参数类型“__attribute__”。扩展 RCTConvert 以支持这种类型
- json - 如何获得一个国家的边界?还是像欧洲这样的绿洲边界?