【发布时间】:2020-02-03 11:57:14
【问题描述】:
我有一个 sql 查询之谜。从我设法从数据库中检索数据的临时表 (#tmp) 中,我必须重新排序选择以满足期望数据的类的需要。 示例中的表格已经足够简化,只是为了了解需要什么。 从#tmp 开始,有Person 列,名为Classes 的第二列包含每个人都可以参加的classId。 最多存在 13 个类。列 FieldOne 和 FieldTwo 是存储每个人和每个人参加的每个班级所需数据的列。
#tmp
Person Classes FieldOne FieldTwo
---------- ---------- ---------- ----------
1 1 90.00 30.00
1 2 80.00 30.00
1 3 70.00 30.00
2 1 90.00 30.00
2 2 80.00 30.00
3 1 90.00 30.00
3 2 80.00 30.00
3 3 70.00 30.00
3 4 60.00 30.00
... ... ... ...
我需要从#tmp 表中进行选择,以便每个人只获得一行,该行中包含所有 13 个类。 对于每个班级有两列需要FieldOne 和FieldTwo,并且在没有数据的情况下(例如,#tmp 表中的人1 没有参加班级编号4),应该存储0.00。 列表中可以有 n 个人,但他们只能参加 13 节课。每个人的一行必须有 personId、所有 13 个类的 FieldOne 和 FieldTwo 的值,以及由其他表中的人员 id 连接的一些其他数据。
需要选择
Person ClassID_1- ClassID_1- ClassID_2- ClassID_2- ClassID_3- ClassID_3- ClassID_4- ClassID_4- ...
FieldOne FieldTwo FieldOne FieldTwo FieldOne FieldTwo FieldOne FieldTwo ...
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ...
1 90.00 30.00 80.00 30.00 70.00 30.00 0.00 0.00 ...
2 90.00 30.00 80.00 30.00 0.00 0.00 0.00 0.00 ...
3 90.00 30.00 80.00 30.00 70.00 30.00 60.00 30.00 ...
4...
实现所需目标的最佳方法是什么?如果有更流畅的方法需要修改期望数据的类,也可以这样做,但我更喜欢保持原样。
【问题讨论】:
标签: c# mysql sql stored-procedures