かなり複雑な 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 ではあまり良い解決策とは思えません。これは任務でも何でもなく、ただの個人的な好奇心です。