gpt4 book ai didi

c# - SQL查询选择谜题

转载 作者:行者123 更新时间:2023-11-29 15:35:50 24 4
gpt4 key购买 nike

我有一个sql查询谜题。从我设法从数据库检索数据的临时表(#tmp)中,我必须重新排序选择以满足需要数据的类的需求。示例中的表格已经足够简化,足以了解需要什么。从 #tmp 开始,有列 Person,第二列名为 Classes,包含每个人都可以参加的 classId。最多存在 13 个类。列 FieldOne 和 FieldTwo 是存储每个人和该人参加的每个类(class)所需数据的列。

#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 个类(class)。对于每个类(class),需要 FieldOne 和 FieldTwo 两列,并且在没有数据的情况下(例如,#tmp 表中的人员 1 没有参加 4 号类(class)),应该存储 0.00。列表中可以有n个人,但他们只能参加13个类(class)。每个人的一行必须包含 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...

实现所需目标的最佳方法是什么?如果有更顺畅的方法需要修改需要数据的类,也可以完成,但我更喜欢保持原样。

最佳答案

使用聚合:

select person,
max(case when classid = 1 then field1 end) as field1_1,
max(case when classid = 1 then field2 end) as field2_1,
max(case when classid = 2 then field1 end) as field1_2,
max(case when classid = 2 then field2 end) as field2_2,
max(case when classid = 3 then field1 end) as field1_3,
max(case when classid = 3 then field2 end) as field2_3,
max(case when classid = 4 then field1 end) as field1_4,
max(case when classid = 4 then field2 end) as field2_4,
. . .
from t
group by person;

唯一需要注意的是,您需要知道结果集中有哪些列——即您想要的类 ID 的数量。

如果您不知道,那么您需要动态构造查询。同样的想法也成立,但是您在字符串中进行查询,然后执行它。

关于c# - SQL查询选择谜题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58248358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com