标题很可怕,但这是我能做的最好的。我所拥有的是这样的:
Country Tag Weight
-----------------------
1 1 20
1 2 30
1 3 77
2 1 10
2 2 11
2 3 100
或者,以人类可读的形式:
Country Tag Weight
-----------------------
USA Rock 20
USA Pop 30
USA Metal 77
Spain Rock 10
Spain Pop 11
Spain Metal 100
在Knime中使用SQL(创建视图)或数据操作工具,我需要将数据操作为这种形式:
Country Rock Pop Metal
----------------------------
USA 20 30 77
Spain 10 11 100
基本上,标记条目(唯一的)成为列,国家(唯一的)成为行ID,其权重值与其国家/标记一致。
我已经尝试了我在Knime中可以想到的一切,并且没有想到原始的SQL查询。在Knime中,我成功创建了我想要的矩阵结构(Country x Tag),但我不知道如何填充实际的Weight值,它们都是问号。我的工作解决方案是简单地将数据以我想要的形式输出到CSV文件中,而不是输入到数据库中。但保持同步这是笨拙和恼人的。有什么想法吗?
答案 0 :(得分:3)
您正在寻找pivot
或cross table
。我对Knime并不多,但那是你想要谷歌搜索的技术。如果Knime没有可用的功能,你可能会比将CSV数据丢弃到MS Excel并转动它更糟糕。
答案 1 :(得分:2)
使用ANSI SQL,您可以使用:
SELECT t.country,
MAX(CASE WHEN t.tag = 'Rock' THEN t.weight END) AS Rock,
MAX(CASE WHEN t.tag = 'Pop' THEN t.weight END) AS Pop,
MAX(CASE WHEN t.tag = 'Metal' THEN t.weight END) AS Metal
FROM YOUR_TABLE t
GROUP BY t.country
LesterDove是正确的 - 您正在进行数据透视查询,将行数据转换为列数据。
PIVOT(和UNPIVOT)是ANSI语法,但支持有点滞后 - SQL Server 2005 +,Oracle 11g +是我唯一知道的。这是下一个ANSI /广泛支持的方法。
答案 2 :(得分:2)
您可以使用KNIME中的Pivoting节点来执行此操作。 只需选择Tag列为Pivot列,Country列为Group列,在Aggregation部分选择Weight列和聚合方法sum。 再见, 托拜厄斯