Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да свържа низове от множество редове в една колона + вътрешно съединение в една заявка

Ето работещия SQL Fiddle:http://sqlfiddle.com/#!3/3597a/3

Ето действително работещия 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

Създаване на таблица и попълване на данни

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 );

Изпълнете 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

Вижте резултатите.

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. За типа .NET DateTime, защо изведеният тип база данни е SqlDbTypes.DateTime вместо SqlDbTypes.DateTime2?

  2. Инсталирайте SQL Server 2016

  3. Копирайте базата данни на SQL Server Express на друг компютър

  4. Колко важен е редът на колоните в индексите?

  5. Как да задам Like на цяла колона?