sql - 有没有办法在 1 行而不是多行中获取我的代码的所有结果?
问题描述
我试图在 1 行而不是多行上获得结果。
我是 SQL 新手,不知道还能做什么。
SELECT
I.D1NAME,
S.MEMBER_NBR,
s.SHARE_NBR
FROM ID.MonthEnd_DL_Load_Dates EOM
JOIN SHARE S ON
EOM.month_end_date = S.DL_LOAD_DATE AND
COALESCE(S.CLOSED,0) = 0 AND
DATEDIFF(DAY,S.LAST_CUST_CONT_DATE,MONTH_END_DATE) > 365
JOIN MEMBERSHIPPARTICIPANT MP ON
S.DL_LOAD_DATE = MP.DL_LOAD_DATE AND
S.MEMBER_NBR = MP.MEMBER_NBR
JOIN INDIVIDUAL I ON
MP.DL_LOAD_DATE = I.DL_LOAD_DATE AND
MP.INDIVIDUAL_ID = I.INDIVIDUAL_ID
WHERE EOM.sequence = 1
我正进入(状态:
Rob 1234 1
Rob 1234 2
我想得到:
Rob 1234 1,2
解决方案
适用于 SQL 服务器 2008 - 2016
此解决方法使用 XML PATH 和 STUFF 将单个变量的多行聚合为一行连接值。此解决方案模仿 SQL SERVER 2017 中的 STRING_AGG。
我将演示如何使用 AdventureWorks 数据库和以下查询:
SELECT SOH.SalesOrderID
,STUFF
(
(
SELECT ', ' + CAST(SOD.ProductID AS VARCHAR(20)) AS [text()]
FROM AdventureWorks2016.Sales.SalesOrderDetail AS SOD
WHERE SOH.SalesOrderID = SOD.SalesOrderID
ORDER BY SOD.SalesOrderDetailID
FOR XML PATH('')
), 1, 1, NULL
) AS ProductIDs
FROM AdventureWorks2016.Sales.SalesOrderHeader AS SOH
示例输出:
SalesOrderID ProductIDs
51176 796, 872
51177 970, 708
51178 779, 871, 870
51179 795, 933, 922, 879
51180 793, 872, 870, 707, 714
51181 792, 922, 933, 707
XML PATH 通过将值作为文本节点返回来连接在一起。STUFF 消除了前导逗号。SELECT 语句将连接收集的文本节点并使用以下行分隔结果:
SELECT ', ' + CAST(SOD.ProductID AS VARCHAR(20)) AS [text()]
PITFALL:请务必将 SHARE_NBR 转换为 VARCHAR(或 NVARCHAR),因为它不适用于数字数据类型,因为 XML PATH 返回文本类型数据。
推荐阅读
- mongodb - 所选数组值的 Mongodb 聚合平均值
- python - 我想保存我通过我的代码从用户那里得到的回复,所以我该怎么做
- powerbi - DAX 尝试创建按大陆过滤国家/地区的度量
- php - 在 Xdebug 中调试时 __DIR__ 未正确解析
- javascript - 在 .NET CORE 的部分视图中使用 Modal JavaScript 在 Ajax Post 之后将不起作用
- javascript - Lazyload:如何处理互联网连接丢失?
- python - 如何迭代单个 API 调用的数据帧行
- terraform - TF aws_security_group:属性“ingress”的值不合适:需要属性“prefix_list_ids”、“security_groups”和“self”
- command-line - 在 Mac Big Sur 上,如何让通过 homebrew 安装的 openssl 版本成为命令行上使用的版本?
- python - 从主机连接到 docker-compose 中介 docker 内的 python 套接字