2017-02-17 9 views
-1

に参加:私は基本的には、列に分割したいSQL Serverの

  • 表Aは、3つの列があります:ID、名前、番号
  • 表Bは、3つの列がありますが:ID、名前、スクール

私は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

あなたは、単一の列に複数の値を保存している場合は、** STOP !**これは、追加のテーブルが必要なサインです。これらの各値は、元のキーの横に独自のレコードがあります。 –

+0

ありがとうございます。追加のテーブルを作成せずにそれを実行できる方法はありますか? – Pranav

答えて

1

あなたはcount(*) over(partition by a.Id)を使用して、各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 | 
+----+------+--------+------------------+ 
+0

私はこれを試してみましょう..ありがとう – Pranav

+0

@Pranav答えのrextesterリンクをクリックすると、rextester.comでオンラインでライブを試すことができます。 http://rextester.com/JQK48793 – SqlZim

+0

テーブルに同じクエリを適用すると、分割されません。実際の数値は分割数と異なります – Pranav

関連する問題