首页 > 解决方案 > 如何在 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 中。

在此处输入图像描述

标签: sqlsql-server

解决方案


我想我想通了。

这就是我所做的,它给了我正在寻找的答案。

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

我从这里得到了帮助


推荐阅读