2

かなり複雑な SQL クエリについて質問があります。(私はSQLサーバーを使用しています)私のデータベースには、クラスのセットと、それらのクラスが持つスキルのセットがあります(多対多の関係にあります)。

マトリックス比較を作成するクエリを作成したい( How to create a matrix with SQL の場合と同様)ただし、可能であれば、各列をハードコーディングせずに。 次の方法で、各クラスペアのオーバーラップ量を比較したいと考えています。

overlap = (Skills_Both_Classes_Have / Total_Skills) * 100

私の主な問題は、変更/表示できる方法でクラスの各ペアの重複を見つける方法です。

クラス テーブルのフォーマット:

|ClassID |   ClassName |
------------------------
|1       |    Class1   |
|2       |    Class2   |
|3       |    Class3   |

スキルテーブルのフォーマット:

|SkillID |   SkillName |
------------------------
|1       |    Skill1   |
|2       |    Skill2   |
|3       |    Skill3   |

中央値表のフォーマット:

|ClassID |SkillID|
------------------
|1       |   1   |
|1       |   2   |
|1       |   3   |
|2       |   2   |
|2       |   4   |
|2       |   5   |
|3       |   1   |
|3       |   2   |
|3       |   5   |

出力例:

       |Class1 |Class2 |Class3 | 
--------------------------------
Class1 |  100  |  033  |  066  |
Class2 |  033  |  100  |  066  |
Class3 |  066  |  066  |  100  |

私はピボットなどで遊んでいますが、SQLでこれを実装する最良の方法に頭を悩ませています。

他の言語では、ループごとにいくつか使用し、出力を配列に送信しますが、SQL ではあまり良い解決策とは思えません。これは任務でも何でもなく、ただの個人的な好奇心です。

4

1 に答える 1