将表格从顺序标识符转换为带属性的实数

问题描述 投票:0回答:1

我更改了上下文,但是基本上是相同的问题。

想象我们在一个永无止境的隧道中,形状像个圆形。我们将圆的每个部分从1拆分为10,并将每个部分称为slot (sl)。在隧道中行走的生物有2 groups (gr)。每个组有2个bands,其中每个都有一个name和全局hitpoints (hp)。每个小组都在前进(尽管乐队可能会改变顺序)。如果一个组在#10插槽中并向前移动,则他将在#1插槽中。我们每隔day快照一次他们的信息。所有收集的数据都存储在具有以下结构的表中:

+----------+----------------+------------------+----------------+----------------+------------------+----------------+----------------+------------------+----------------+----------------+------------------+--------------+--+
| 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_idgr_idsl_idattributesvalues。在attributesvalues中,基本上是名称和hp及其对应的值(我将hp更改为字符串),但随后我有了库存,我不确定下一步该怎么做。

有人有什么想法吗?请记住,我简化了这个问题;有更多的组,更多的插槽,更多的乐队和更多的统计信息(例如,攻击和防御等级等)

sql pivot powerbi
1个回答
0
投票

您似乎想取消桌子的旋转。在SQL Server中,建议使用apply

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);

在其他数据库中,您可以使用union all做类似的事情。

© www.soinside.com 2019 - 2024. All rights reserved.