Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak połączyć ciągi z wielu wierszy w jednej kolumnie + sprzężenie wewnętrzne w jednym zapytaniu?

Oto działające SQL Fiddle:http://sqlfiddle.com/#!3/3597a/3

Oto aktualnie działający 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

Utwórz tabelę i wypełnij dane

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

Wykonaj 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

Wyświetl wyniki.

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. Jak bezpiecznie przechowywać hasła w bazie danych?

  2. Co jest szybsze COALESCE CZY ISNULL?

  3. Jak uniknąć niepowodzenia zadania FTP SSIS, gdy nie ma plików do pobrania?

  4. Odniesienie Procedury składowane dla wszystkich baz danych na serwerze

  5. Alias ​​odniesienia (obliczany w SELECT) w klauzuli WHERE