SQL连接同一列的单元格

时间:2018-10-30 17:49:29

标签: sql sql-server

我正在尝试创建一个查询,该查询能够与Microsoft SQL Server Management Studio合并ProfileItemID列中的值。

这是查询。首先,我不确定是否正确,因为在运行该错误后,我会收到此错误。

    SELECT RoomID, ',' + ProfileItemID 
    FROM RoomProfile
    WHERE RoomID = 1829 
    FOR XML PATH('')

“将varchar值','转换为数据类型int时转换失败。”

随附的图像包含我所拥有的表格信息和整个屏幕的图像。

希望有人能帮助我。我真的不知道该怎么办,因为我还是SQL的新手。

提前谢谢!

表格:

    |----------------------------------------|
    |                RoomProfile             |
    |---------------------|------------------|
    |         RoomID      |   ProfileItemID  |
    |---------------------|------------------|
    |          1829       |         28       |
    |---------------------|------------------|
    |          1829       |         103      |
    |---------------------|------------------|
    |          1829       |         104      |
    |----------------------------------------|

输出:

    |----------------------------------------|
    |          1829       |   28, 103, 104   |
    |----------------------------------------|

TABLE Screenshot_1 Screenshot_2

3 个答案:

答案 0 :(得分:3)

您可以将 STUFF() 函数和 FOR XML 子句与PATH模式一起使用

CREATE TABLE T
    ([RoomID] int, [ProfileItemID] int)
;

INSERT INTO T
    ([RoomID], [ProfileItemID])
VALUES
    (1829, 28),
    (1829, 103),
    (1829, 104);

SELECT DISTINCT RoomID,
       STUFF(
              (SELECT ',' + CAST(ProfileItemID AS VARCHAR(10))
               FROM T
               FOR XML PATH('')
              ), 1, 1, ''
       ) Result
FROM T;

返回:

+--------+------------+
| RoomID |   Result   |
+--------+------------+
|   1829 | 28,103,104 |
+--------+------------+

Demo

答案 1 :(得分:0)

您可能只需要将id转换为字符串:

SELECT RoomID, ',' + CONVERT(VARCHAR(MAX), ProfileItemID)
FROM RoomProfile
WHERE RoomID = 1829 
FOR XML PATH('')

答案 2 :(得分:0)

除了戈登的答案,您还可以使用CAST功能,如下所示:

SELECT RoomID, ',' + Cast(ProfileItemID as varchar(50))