计算足球运动员之间互动的统计数据

Calculating statistics of interactions between football players

我有一些足球运动员之间的 table 踢球。大多数互动都有踢球者和接球者,但有时会传球但从未接球。 table 包含 3 列。为了示例的目的,我添加了一个“PassID”列来帮助描述问题。

table 看起来如下:

create table #T (Player1 varchar(25),Action varchar(25),Player2 varchar(25),PassID int)
insert into #T select 'Jamie','Kicked to','Pierre',1
insert into #T select 'Pierre','Received from ','Jamie',1
insert into #T select 'Jamie','Kicked to ','Mohamed',2
insert into #T select 'Jamie','Received from ','Kun',3
insert into #T select 'Kun ','Kicked to','Jamie',3
insert into #T select 'Mohamed','Received from ','Pierre',4
insert into #T select 'Pierre','Kicked to','Mohamed',4
insert into #T select 'Mohamed','Kicked to','Kun',5
insert into #T select 'Jamie ','Kicked to ','Kun',6
insert into #T select 'Kun ','Received from ','Jamie',6
insert into #T select 'Jamie','Received from ','Kun',7
insert into #T select 'Kun ','Kicked to','Jamie',7

我必须使用 SQL 服务器回答以下问题: 存在多少独特的互动,其中独特的互动被定义为两名球员之间的踢球,无论是否完成,互动的方向无关紧要?

在这个简单的例子中,我知道答案是 5,即: Jamie/Pierre Jamie/Mohamed Jamie/Kun Mohamed/Pierre Mohamed/Kun

如何使用 T-SQL 语句从 table 中提取此答案?

SELECT COUNT(DISTINCT CASE 
                      WHEN Player1 > Player2 THEN CONCAT(Player1,'+',Player2) 
                      ELSE CONCAT(Player2,'+',Player1)
                      END )
FROM #T
WHERE Action = 'Kicked To';

这是一个SQL Fiddle

试试下面的代码。

Select CONCAT(x.Player1,'/',x.Player2)Title from (
Select *,ROW_NUMBER() over (PARTITION by passid order by passid)Row from #T
)X
where Row=1