मेरे पास तीन टेबल हैं और मैं उन पुस्तक आईडी को मर्ज करना चाहता हूं जिनमें पाठक और संस्करण एक पंक्तियों में हों। पाठकों और संस्करण को ',' से जोड़ा जाना चाहिए।

पुस्तक

Id name   description    
----------------------
1  Book1  Book 1 Title    
2  Book2  Book 2 Title    
3  Book3  Book 3 Title    
4  Book5  Book 5 Title 

पुस्तक पाठक

BookId   Name     
----------------------
1        James   
2        Stephane 
2        Michael  

पुस्तक संस्करण

BookId   version
----------------------------------
1        v1
1        v2
2        v1
2        v2
2        v3    

अभी के लिए मैं इस क्वेरी का उपयोग करता हूं

select 
    b.id as BookId, r.name as Reader, v.version as Version 
from 
    Book as b
left outer join 
    BookReader as r on r.bookId = b.id
left outer join 
    BookVersion as v on v.bookId = b.id

और मुझे यह परिणाम मिलता है:

BookId Reader   Version    
    ----------------------
    1  James     v1
    1  James     v2
    2  Stephane  v1
    2  Stephane  v2
    2  Stephane  V3
    2  Michael   v1
    2  Michael   v2
    2  Michael   V3
    3  NULL      NULL    
    4  NULL      NULL 

लेकिन मुझे इस तरह का परिणाम चाहिए:

 BookId  Reader                 Version    
 --------------------------------------------
    1    James                  v1, v2
    2    Stephane, Michael      v1, v2, v3
    3    NULL      NULL    
    4    NULL      NULL 

इसे करने का सबसे अच्छा तरीका क्या है? सीटीई के साथ? या कोई और तरीका है? धन्यवाद

0
lory 24 सितंबर 2018, 01:25

1 उत्तर

सबसे बढ़िया उत्तर

आप csv मान उत्पन्न करने के लिए STUFF का उपयोग कर सकते हैं। नीचे मैं सामान्य रूप से उपयोग करता हूं।

    CREATE TABLE #Book
    (
        Id INT ,
        NAME VARCHAR(100) ,
        Description VARCHAR(100)
    );

CREATE TABLE #BookReader
    (
        BookId INT ,
        Name VARCHAR(100)
    );


CREATE TABLE #BookVersion
    (
        BookId INT ,
        Version VARCHAR(10)
    );


INSERT INTO #Book ( Id ,
                    NAME ,
                    Description )
VALUES ( 1 ,            -- Id - int
         'Book1' ,      -- NAME - varchar(100)
         'Book 1 Title' -- Description - varchar(100)
    ) ,
       ( 2 ,            -- Id - int
         'Book2' ,      -- NAME - varchar(100)
         'Book 2 Title' -- Description - varchar(100)
       ) ,
       ( 3 ,            -- Id - int
         'Book3' ,      -- NAME - varchar(100)
         'Book 3 Title' -- Description - varchar(100)
       ) ,
       ( 4 ,            -- Id - int
         'Book5' ,      -- NAME - varchar(100)
         'Book 5 Title' -- Description - varchar(100)
       );

INSERT INTO #BookReader ( BookId ,
                          Name )
VALUES ( 1 ,     -- BookId - int
         'James' -- Name - varchar(100)
    ) ,
       ( 2 ,        -- BookId - int
         'Stephane' -- Name - varchar(100)
       ) ,
       ( 2 ,       -- BookId - int
         'Michael' -- Name - varchar(100)
       );

INSERT INTO #BookVersion ( BookId ,
                           Version )
VALUES ( 1 ,  -- BookId - int
         'v1' -- Version - varchar(10)
    ) ,
       ( 1 ,  -- BookId - int
         'v2' -- Version - varchar(10)
       ) ,
       ( 2 ,  -- BookId - int
         'v1' -- Version - varchar(10)
       ) ,
       ( 2 ,  -- BookId - int
         'v2' -- Version - varchar(10)
       ) ,
       ( 2 ,  -- BookId - int
         'v3' -- Version - varchar(10)
       );


SELECT b.Id ,
       LTRIM(STUFF((   SELECT ', ' + br1.[Name] AS [text()]
                 FROM   #BookReader br1
                 WHERE  br1.BookId = b.Id
                 FOR XML PATH('')) ,
             1 ,
             1 ,
             '')) AS Reader ,
       LTRIM(STUFF((   SELECT ', ' + Version
                 FROM   #BookVersion bv1
                 WHERE  bv1.BookId = b.Id
                 FOR XML PATH('')) ,
             1 ,
             1 ,
             '')) AS version
FROM   #Book b;



DROP TABLE #Book;
DROP TABLE #BookReader;
DROP TABLE #BookVersion;

परिणाम:

+----+--------------------+-------------+
| Id |       Reader       |   Version   |
+----+--------------------+-------------+
|  1 | James              | v1, v2      |
|  2 | Stephane, Michael  | v1, v2, v3  |
|  3 | NULL               | NULL        |
|  4 | NULL               | NULL        |
+----+--------------------+-------------+
1
AB_87 24 सितंबर 2018, 03:52