Sql 将表从序列标识符转换为带属性的实数
我改变了一个话题,但背景不同,但基本上是同一个话题 想象一下,我们在一条永无止境的隧道里,形状像一个圆圈。我们将圆圈的每一部分从1到10分开,我们将每个部分称为slot sl。有两组生物在隧道中行走。每组有2个波段,每个波段都有一个名称和全局生命值。尽管乐队可能会改变顺序,但每个乐队都在向前走。如果一组人在第10格并向前移动,他将在第1格。我们每天抓拍他们的信息。收集的所有数据都存储在具有以下结构的表中:Sql 将表从序列标识符转换为带属性的实数,sql,sql-server,pivot,powerbi,Sql,Sql Server,Pivot,Powerbi,我改变了一个话题,但背景不同,但基本上是同一个话题 想象一下,我们在一条永无止境的隧道里,形状像一个圆圈。我们将圆圈的每一部分从1到10分开,我们将每个部分称为slot sl。有两组生物在隧道中行走。每组有2个波段,每个波段都有一个名称和全局生命值。尽管乐队可能会改变顺序,但每个乐队都在向前走。如果一组人在第10格并向前移动,他将在第1格。我们每天抓拍他们的信息。收集的所有数据都存储在具有以下结构的表中: +----------+----------------+----------------
+----------+----------------+------------------+----------------+----------------+------------------+----------------+----------------+------------------+----------------+----------------+------------------+--------------+--+
| day_id | | gr_1_sl_1_id | | gr_1_sl_1_name | | gr_1_sl_1_hp | | gr_1_sl_2_id | | gr_1_sl_2_name | | gr_1_sl_2_hp | | gr_2_sl_1_id | | gr_2_sl_1_name | | gr_2_sl_1_hp | | gr_2_sl_2_id | | gr_2_sl_2_name | | gr_2_sl_2_hp | |
+----------+----------------+------------------+----------------+----------------+------------------+----------------+----------------+------------------+----------------+----------------+------------------+--------------+--+
| 1 | 3 | orc | 100 | 4 | goblin | 10 | 10 | human | 50 | 1 | dwarf | 25 | |
| 2 | 6 | goblin | 7 | 7 | orc | 76 | 2 | human | 60 | 3 | dwarf | 28 | |
+----------+----------------+------------------+----------------+----------------+------------------+----------------+----------------+------------------+----------------+----------------+------------------+--------------+--+
如您所见,列是按顺序构造的,而数据显示实际值。我想要的是以这种方式塑造信息:
+---------+-------+-------+-----------+---------+
| id_game | gr_id | sl_id | band_name | band_hp |
+---------+-------+-------+-----------+---------+
| 1 | 1 | 3 | orc | 100 |
| 1 | 1 | 4 | goblin | 10 |
| 1 | 2 | 10 | human | 50 |
| 1 | 2 | 1 | dwarf | 25 |
| 2 | 1 | 6 | goblin | 7 |
| 2 | 1 | 7 | orc | 76 |
| 2 | 2 | 2 | human | 60 |
| 2 | 2 | 3 | dwarf | 28 |
+---------+-------+-------+-----------+---------+
我在power bi中有这些信息,但如果需要,我可以在sql server中创建视图。我尝试过很多方法,最接近的方法是取消激发并解析原始列,以获得day_id、gr_id、sl_id、属性和值。在属性和值中,基本上是name和hp及其对应的值。我将hp更改为string,但随后我有了库存,我不确定下一步该做什么
有人有什么想法吗?记住,我把问题简单化了;有更多的组、更多的槽、更多的带和更多的统计数据,即攻击和防御等级等。您似乎想取消该表。在SQL Server中,我建议使用apply:
在其他数据库中,您可以对union all执行类似的操作。使用您正在使用的数据库标记您的问题。它确实有效。我第二次听到交叉应用和它的神奇效果。谢谢
select t.day_id, v.*
form t cross apply
(values (1, 1, gr_1_sl_1_id, gr_1_sl_1_name, gr_1_sl_1_hp),
(1, 2, gr_1_sl_2_id, gr_1_sl_2_name, gr_1_sl_2_hp),
(2, 1, gr_2_sl_1_id, gr_1_sl_1_name, gr_2_sl_1_hp),
(2, 2, gr_2_sl_2_id, gr_1_sl_2_name, gr_2_sl_2_hp)
) v(id_game, gr_id, sl_id, band_name, band_hp);