sql >> データベース >  >> RDS >> Sqlserver

複数の行からの文字列を1つの列に連結+ 1つのクエリで内部結合する方法

    動作中の SQL Fiddle は次のとおりです。

    これが実際に動作する 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. ダイレクトNFSでのORA-4031エラー

    2. MySQLのトランザクションDDLワークフロー

    3. PHPで、配列の内容をテーブルに表示する方法

    4. OracleSIDとサービス名。接続の問題