+----------+----------+----------+----------+--------------------------+
| Club | Role | Name | Lastname | Email |
+----------+----------+----------+----------+--------------------------+
| Porto | 1 | Peter | Pan | peter.pan@mail.com |
| Porto | 2 | Michelle | Obama | michelle.obama@mail.com |
| Monaco | 1 | Serena | Williams | serena.williams@mail.com |
| Monaco | 2 | David | Beckham | david.beckham@mail.com |
+----------+----------+----------+----------+--------------------------+
+----------+-----------------+-----------------+---------------------------------+-----------------+-----------------+---------------------------------+
| Club | Role 1 Name | Role 1 Lastname | Role 1 Email | Role 2 Name | Role 2 Lastname | Role 2 Email |
+----------+-----------------+-----------------+---------------------------------+-----------------+-----------------+---------------------------------+
| Porto | Peter | Pan | peter.pan@mail.com | Michelle | Obama | michelle.obama@mail.com |
| Monaco | Serena | Williams | serena.williams@mail.com | David | Beckham | david.beckham@mail.com |
+----------+-----------------+-----------------+---------------------------------+-----------------+-----------------+---------------------------------+
每个俱乐部中角色不同的人放在同一行。
理想情况下,我想找到一种在Excel中执行此操作的方法,但我不确定是否可能。如果不是这样,SQL代码也会有很大帮助。
答案 0 :(得分:0)
这是我想出的一个Excel公式。希望它可以将您推向正确的方向。
此公式假定您的第一个表存在于A1:E5范围内,而第二个表存在于G1:M3范围内。还假设第二个表的列名只是重复而没有在其前面附加角色编号(与第一个表相同)。该公式是一个数组公式,因此输入时必须确保执行CTRL + SHIFT + ENTER。
{=INDEX($A$2:$E$5,
MATCH(1,($G2=$A$2:$A$5)*((FLOOR((COLUMN() - COLUMN($H$1) ) / 3,1) + 1)=$B$2:$B$5),0),
MATCH(H$1,$A$1:$E$1,0))}
第一部分使用INDEX
forumla,它根据以下MATCH
公式提供的行数和列数从补充范围($ A $ 2:$ E $ 5)提取数据。 / p>
当查找数组部分的结果等于1时,第一个MATCH
提供行号。我正在检查两个条件,第一个是检查“俱乐部”名称{{1} },第二步是检查我们当前在($G2=$A$2:$A$5)
上的哪个“角色”。这是使用((FLOOR((COLUMN() - COLUMN($H$1) ) / 3,1) + 1)
函数将结果四舍五入为整数并除以列数(在这种情况下为3,即:姓名,姓氏和电子邮件)。
最后一个FLOOR
将根据两个表中的标题名称提取列号。如果您想将更改的角色名称合并到列标题中,则可以将此部分更改为类似以下内容:
MATCH
由于在表1中选择了原始范围,因此我在mod的末尾添加了3。我们要提取的列从范围中的位置3开始。
答案 1 :(得分:0)
如果要在Oracle Sql中执行此操作,则在分析sql中有一个不错的方法。 要将行转换/交换为列或将列转换为行,我们可以使用Pivot或Unpivot运算符。 在您的示例中,使用以下查询根据需要隐藏数据
Result = array of size nb_objects, initialized with empty sets
for i from 0 to total_nb_of_objects:
for each feasible solution 'new_solution' to the problem with fixed number of objects:
for each solution of Result[i]:
if hours(new_solution) >= hours(solution) and \
cost(new_solution) >= cost(solution) and \
people(new_solution) >= people(solution):
dominated = true
break
if not dominated:
add new_solution to Result[i]
return Result