sql - 如何在 SQL Server 中将多行与 JSON PATH 结合起来?
问题描述
我有这个包含 4 个表的数据集。我正在尝试编写如下 SQL 查询:
WITH test AS
(
SELECT
(f.name), f.id, f.domain, s.link,
(SELECT
name,
CASE
WHEN name IN (1, 3, 8) THEN 1
WHEN name IN (2, 6, 7) THEN 2
END AS [group]
FROM tags
WHERE corporate_statement_link_id = s.id
FOR JSON PATH) AS tags
FROM
fortune1000_companies f
LEFT JOIN
search_results s ON f.id = s.company_id
LEFT JOIN
corporate_statements c ON s.id = c.corporate_statement_link_id
WHERE
c.corporate_statement = 1
AND s.domain LIKE CONCAT('%', f.domain, '%')
)
SELECT name, link, tags
FROM test
但这会产生由于链接不同而导致公司名称重复的结果。例如,UnitedHeath Group(第 4 行和第 5 行)是两行,因为链接不同。我希望结果是公司名称只显示一次,并且标签一起在同一个组中。我不需要显示链接;仅包含在此 SO 中。
解决方案
我想我想通了。
这就是我所做的,它给了我正在寻找的答案。
select name
, (STUFF((SELECT t.[name] from tags t
inner join search_results s
on s.id = t.corporate_statement_link_id
where f.id = s.company_id
FOR JSON PATH),1,2,'[{')) as ts
from [fortune1000_companies] f
where f.id between 1 and 101
我从这里得到了帮助
推荐阅读
- ansible - 如何将此输出解析为 Json 格式
- imagemagick - 防止黑白图像自动转换为灰度图像
- django - 如何在 django 的 models.py 中使用自定义验证器验证 DateTimeField?
- optimization - 功能程序是否已经采用 SSA 形式?
- python - 如何打乱数组的列?
- arrays - 对齐多个有序序列的最有效算法
- machine-learning - 使用 librosa.effects.trim 去除音频中的无声部分
- powershell - 进行多次 api 调用,并将每次调用的数据保存为 csv 格式的变量
- c++ - 在派生类中调用基类构造函数时出现分段错误
- video - 如何使用开始和结束时间而不是持续时间使用 ffmpeg 进行剪切?