连接列字符串以匹配行

时间:2016-05-16 19:00:20

标签: sql sql-server tsql concatenation

这是我的问题:

SELECT 
    sys.objects.object_id, sys.objects.name, sys.objects.type_desc, 
    sys.syscomments.text
FROM 
    sys.objects
LEFT JOIN 
    sys.syscomments ON sys.syscomments.id = sys.objects.object_id
WHERE 
    (type_desc LIKE 'SQL_STORED_PROCEDURE' OR type_desc LIKE 'SQL_SCALAR_FUNCTION')
ORDER BY 
    sys.objects.object_id;

以下是输出的一部分:

enter image description here

那么我如何连接具有相同'object_id'的行的'text'列,以便我没有重复的ID?如果没有字符串的聚合函数,在T-SQL中就不那么简单了......

我已经看过其他例子,但我似乎无法让它适用于我的场景。

2 个答案:

答案 0 :(得分:1)

您需要创建一个连接函数:

SELECT

然后,执行SELECT dbo.[objects].[object_id], dbo.[objects].name, dbo.[objects].type_desc, dbo.GetTexts([object_id]) FROM dbo.[objects] 查询。

./server_start.sh --master spark://ip:7077 --deploy-mode cluster --conf spark.driver.cores=2 --conf spark.driver.memory=4g

P.S。:我不确定模式名称,因此请根据需要进行更正。

答案 1 :(得分:0)

执行连接聚合的For XML Path方法是您在此处执行此操作的更常用方法之一。

有关详细信息,请参阅this post

您的情况的应用可能如下所示:

SELECT B.object_id, B.name, B.type_desc, 
    STUFF((SELECT A.[text] 
                        FROM sys.syscomments AS A
                        WHERE A.id = B.[object_id]
                        FOR XML PATH('')), 1, 1, '' ) AS [text]
FROM 
    sys.objects AS B
WHERE type_desc LIKE 'SQL_STORED_PROCEDURE' OR type_desc LIKE 'SQL_SCALAR_FUNCTION'
ORDER BY B.[object_id];