计算以逗号分隔的 SQL 列中的项目

Count items in comma-delimited SQL column

我有一个电影数据库,其中演员字段作为逗号分隔列,如下所示。

我想要完成的是计算每个演员在数据库中有多少部电影。 cast字段长度不一

      'John Wayne'           100
      'Tom Cruise'            17
      'Ravi Shankar'           5 

示例数据:

Title                   Cast
----------------------------------------------------------------------    
BEAUTIFUL MIND          Russell Crowe, Ed Harris, Jennifer Connelly, Paul Bettany, Adam Goldberg, Judd Hirsch, Josh Lucas, Anthony Rapp, Christopher Plummer, Clint Howard
ABDUCTION OF EDEN       Jamie Chung, Matt O Leary, Beau Bridges, Scott Mechlowicz, Mariana Klaveno, Tantoo Cardinal, Tracey Fairaway, Russell Hodgkinson, Naama Kates, Tony Doupe
ABSENCE OF MALICE       Bob Balaban, Wilford Brimley, Melinda Dillon, Sally Field, John Harkins, Paul Newman, Barry Primus, Josef Sommer, Luther Adler, Don Hood
 Columbus Short, Mark Derwin, Jonah Hill, Robin Lord Taylor, Adam Herschman

感谢您的惠顾。

托尼

假设您有两个单独的电影名称和演员表列..这是一个可能的解决方案。您将需要一个函数来从 csv 创建一个列表。google 它或在这里搜索,您会找到它..

;with my_cast as (
select 
 'Jamie Chung,Russell Crowe, Ed Harris, Jennifer Connelly, Paul Bettany, Adam Goldberg, Judd Hirsch, Josh Lucas, Anthony Rapp, Christopher Plummer, Clint Howard, Clint Howard' as names
 union all
 select
 'Jamie Chung, Matt O Leary, Beau Bridges, Scott Mechlowicz, Mariana Klaveno, Tantoo Cardinal, Tracey Fairaway, Russell Hodgkinson, Naama Kates, Tony Doupe'
 union all
 select
 ' Adam Goldberg,Bob Balaban, Wilford Brimley, Melinda Dillon, Sally Field, John Harkins, Paul Newman, Barry Primus, Josef Sommer, Luther Adler, Don Hood Columbus Short, Mark Derwin, Jonah Hill, Robin Lord Taylor, Adam Herschman'
 )

 ,my_names_list as (
 Select value as names_list from   my_cast  
CROSS APPLY dbo.F_SplitList(my_cast.names, ',') b
)

Select  
names_list
,count(*) as howmany

from my_names_list

group by names_list

假设有两列,titlecast,您的问题的解决方案需要您将 cast 列中的 comma-delimited 列表拆分为一个新的列,其中每个演员都出现在自己的行中。

如果您是 运行 SQL Server 2016 或更高版本并且数据库兼容级别设置为 130 或更高版本,您可以使用 built-in string_split 的组合函数和交叉应用以获得您想要的结果,如下所示:

select value as "Cast member", count(title) as "Count of movies"
from movies
cross apply string_split(cast, ',')
group by value

如果您使用的是较旧的数据库版本,则必须使用一些自定义函数拆分 cast 列,这些函数周围有很多 - 在此处快速搜索 SO 应该会为您提供合适的解决方案。 (Here is one post with several suitable functions)

Sample SQL Fiddle for the query above