Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách nối các chuỗi từ nhiều hàng trong một cột + nối bên trong trong một truy vấn

Đây là SQL Fiddle đang hoạt động: http://sqlfiddle.com/#!3/3597a/3

Đây là SQL hoạt động thực tế.

SELECT Tasks.TaskId, SUBSTRING(
(SELECT ',' + Comments.Comment
FROM Comments
INNER JOIN tasks ON comments.entityid = tasks.taskid
FOR XML PATH('')),2,200000) AS Comments
, SUM(comments.timespent) AS TimeSpent      
FROM   comments
INNER JOIN tasks ON comments.entityid = tasks.taskid                
WHERE  ( comments.entity = 1 ) 
GROUP  BY Tasks.TaskId

Tạo bảng và điền dữ liệu

CREATE TABLE Tasks
(
  TaskID NVARCHAR(20) NOT NULL,
);

CREATE TABLE Comments
( 
  Entity  INT NOT NULL,
  EntityID NVARCHAR(20) NOT NULL,
  Comment NVARCHAR(50) NOT NULL,
  TimeSpent INT NOT NULL
);


INSERT INTO Tasks VALUES
( '111754' );

INSERT INTO Comments VALUES
(1,'111754', 'C1',4 ),
(1,'111754', 'C2',1 ),
(1,'111754', 'C3',79 );

Thực thi SQL

SELECT Tasks.TaskId, SUBSTRING(
(SELECT ',' + Comments.Comment
FROM Comments
INNER JOIN tasks ON comments.entityid = tasks.taskid
FOR XML PATH('')),2,200000) AS Comments
, SUM(comments.timespent) AS TimeSpent     
FROM   comments
INNER JOIN tasks ON comments.entityid = tasks.taskid                
WHERE  comments.entity = 1 
GROUP  BY Tasks.TaskId

Xem kết quả.

TASKID  COMMENTS    TIMESPENT
111754  C1,C2,C3    84


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Loại bỏ đệm khi gửi kết quả truy vấn trong email từ SQL Server (T-SQL)

  2. Cập nhật câu lệnh use case

  3. Nhận số lần đăng nhập không thành công để đăng nhập do sai mật khẩu trong SQL Server (T-SQL)

  4. CẬP NHẬT bản ghi trong một cơ sở dữ liệu với các giá trị từ một cơ sở dữ liệu khác trong SQL Server 2008?

  5. Truy vấn SQL - Thay đổi định dạng ngày trong truy vấn thành DD / MM / YYYY