我有一个关于相当复杂的 SQL 查询的问题。(我正在使用 sql server)在我的数据库中,我有一组类,以及这些类所具有的一组技能(以多对多关系)。
我想构建一个构建矩阵比较的查询(类似于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 中似乎不是一个很好的解决方案。这不是为了任务或任何事情,只是为了我个人的好奇心。