【问题标题】:Select Comma separated values sql stored procedure [duplicate]选择逗号分隔值sql存储过程[重复]
【发布时间】:2014-06-30 19:12:09
【问题描述】:

我有三张桌子:

  1. book_shelf -> pkid 等列

  2. book_author -> pkid,fkid_book_shelf,fkid_author

  3. author -> pkid,name

对于book_shelf 中的一行,希望将作者姓名以逗号分隔。如果书架实体有两个作者,则在book_author 表中插入两行。

这是我尝试过的

(select BookShelf.pkid as SrNo,stuff((select ',' + a.name
    from 
    lib.book_shelf bs inner join
    lib.book_author ba on bs.pkid=ba.fkid_book_shelf
    inner join lib.author a on a.pkid=ba.fkid_authors 
    for xml path ('')
), 1, 1, '') as Author from lib.book_shelf BookShelf)

但它会为每个 book_shelf 行选择所有作者姓名。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    希望这对你有帮助。

    CREATE TABLE BookShelf(ID INT)
    CREATE TABLE BookAuthor(ID INT, BookShelf INT, AuthorID INT)
    CREATE TABLE Author(ID INT, Name VarChar(50))
    GO
    
    INSERT INTO BookShelf VALUES(1)
    INSERT INTO BookShelf VALUES(2)
    
    INSERT INTO Author VALUES(1,'Author1')
    INSERT INTO Author VALUES(2,'Author2')
    INSERT INTO Author VALUES(3,'Author3')
    INSERT INTO Author VALUES(4,'Author4')
    
    
    INSERT INTO BookAuthor VALUES(1,1,1)
    INSERT INTO BookAuthor VALUES(1,1,2)
    INSERT INTO BookAuthor VALUES(1,2,3)
    INSERT INTO BookAuthor VALUES(1,2,4)
    
    SELECT 
        BookShelf.ID, 
        STUFF((SELECT ',' + Author.Name FROM BookAuthor INNER JOIN Author ON BookAuthor.AuthorID = Author.ID WHERE BookAuthor.BookShelf = BookShelf.ID FOR XML PATH('')),1,1,'')
    FROM 
        BookShelf 
    

    【讨论】:

    • 如果书架有一个作者,则需要一个','(逗号)
    • FOR XML 位不太正确。试试FOR XML PATH('')), 1, 1, '' )
    • 更新了声明..立即验证。
    • 帮了大忙,非常感谢
    猜你喜欢
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    相关资源
    最近更新 更多