我正在尝试在SQL Server数据库中切出一列,其中的表与记者撰写的文章有关。问题在于,每个新闻工作者都没有ID,但是在“作家”列中放置了新闻工作者的姓名,如果他/她成对写信,那么姓名将一个接一个。
我想要实现的是:
1)每个记者都被分配了自己的行和ID (我将其称为“ WriterId”)
2)第二行按该顺序计算新闻工作者的人数。
如何复制:
CREATE TABLE article (
ArticleId int,
Title varchar(50),
Writer varchar(50),
Body varchar(max)
);
并插入值:
INSERT INTO article (ArticleId, Title, Writer, Body)
VALUES
(1, 'Title Article 1', 'Sabao Fulano, Sapato Feio, Jose Perreira', 'Body of Article 1'),
(2, 'Title Article 2', 'Feijao Mauricio', 'Body of Article 2'),
(3, 'Title Article 3', 'Toze Jose', 'Body of Article 3');
理想的输出:
ArticleId Title Writer WriterId Count(Writer) Body
1 Title Article 1 Sabao Fulano W1 3 Body of Article 1
1 Title Article 1 Sapato Feio W2 3 Body of Article 1
1 Title Article 1 Jose Perreira W3 3 Body of Article 1
2 Title Article 2 Feijao Mauricio W4 1 Body of Article 2
3 Title Article 3 Toze Jose W5 1 Body of Article 3
任何线索如何实现这一目标?
答案 0 :(得分:4)
由于您使用的是SQL Server 2017,因此使用STRING_SPLIT
有一个便捷的解决方案:
SELECT
ArticleId,
Title,
Body,
COUNT(*) OVER (PARTITION BY ArticleId) writer_count
VALUE AS Writer
FROM article
CROSS APPLY STRING_SPLIT(Writer, ',');
在这里我唯一要补充的关于STRING_SPLIT
的评论是,接收拆分值的列必须称为value
。但是,然后我们可以将该列作为其他名称的别名,例如Writer
,如果我们想这样做。