选择逗号分隔值sql存储过程
我有三张桌子:选择逗号分隔值sql存储过程,sql,sql-server,Sql,Sql Server,我有三张桌子: 书架->pkid和其他列 book\u author->pkid,fkid\u book\u shelf,fkid\u author 作者->pkid,姓名等 对于中book\u shelf中的一行,希望以逗号分隔的形式获取作者姓名。如果书架实体有两个作者,则在book\u author表中插入两行 这是我试过的 (select BookShelf.pkid as SrNo,stuff((select ',' + a.name from lib.book_she
书架
->pkid
和其他列book\u author
->pkid
,fkid\u book\u shelf
,fkid\u author
作者
->pkid
,姓名
等book\u shelf
中的一行,希望以逗号分隔的形式获取作者姓名。如果书架实体有两个作者,则在book\u 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)
但是它会为每个
书架
行选择所有作者姓名。希望这对您有所帮助
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
如果书架上有一个authorth,则需要一个“,”(逗号)。XML的
位不太正确。请尝试对XML路径(“”)、1、1、“”)执行。
。已更新该语句。。现在验证。帮助很大,非常感谢