如何在SQL Server中进行内部联接时对列进行分数分割

时间:2017-02-17 17:25:41

标签: sql-server

我想基本上拆分一列:

  • 表A有3列:Id,Name,Number
  • 表b有3列:Id,Name,School

我在Id的基础上加入。

假设数字为100,Name可能有多个学校(假设为3),所以我想平均将100分为3并进行连接。

样本决赛桌

Id   Name   School   Number
---------------------------
 1   ABC      A       33.33
 1   ABC      B       33.33
 1   ABC      C       33.33

1 个答案:

答案 0 :(得分:1)

您可以使用count(*) over( id获取每个partition by a.Id)的计数,然后将数字除以。

测试设置:rextester:http://rextester.com/JQK48793

create table a (id int, name char(3), number decimal(9,2))
insert into a 
values (1,'ABC',100.0)

create table b (id int, name char(3), school char(1))
insert into b values 
 (1,'ABC','A')
,(1,'ABC','B')
,(1,'ABC','C')

查询:

select 
     a.Id
  ,  a.Name
  ,  b.School
  ,  Number = (a.Number+.0) / count(*) over (partition by a.Id)
from a
  inner join b
    on a.Id = b.Id

结果:

+----+------+--------+------------------+
| Id | Name | School |      Number      |
+----+------+--------+------------------+
|  1 | ABC  | A      | 33,3333333333333 |
|  1 | ABC  | B      | 33,3333333333333 |
|  1 | ABC  | C      | 33,3333333333333 |
+----+------+--------+------------------+