Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL/Knime-将表转置为;分组方式;_Mysql_Sql_Pivot_Knime - Fatal编程技术网

Mysql SQL/Knime-将表转置为;分组方式;

Mysql SQL/Knime-将表转置为;分组方式;,mysql,sql,pivot,knime,Mysql,Sql,Pivot,Knime,标题很糟糕,但这是我能做的最好的了。我拥有的是这样的东西: Country Tag Weight ----------------------- 1 1 20 1 2 30 1 3 77 2 1 10 2 2 11 2 3 100 或者,以人类可读的形式: Country Tag Weight ---------------------

标题很糟糕,但这是我能做的最好的了。我拥有的是这样的东西:

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中,我成功地创建了我想要的矩阵结构(国家x标记),但我不知道如何填充实际的权重值,它们都是问号。我的工作解决方案是简单地将数据以我想要的形式输出到CSV文件中,而不是输出到数据库中。但是,保持同步是非常糟糕和恼人的。有什么想法吗?

您正在寻找一个
pivot
cross table
。我对Knime不太感兴趣,但这就是你想在谷歌上搜索的技术。如果Knime没有该功能可用,您可能会做得比将CSV数据放入MS Excel并透视它更糟糕。

使用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查询,以将行数据转换为列数据


PIVOT(和UNPIVOT)是ANSI语法,但支持有点滞后——我只知道SQL Server 2005+、Oracle 11g+。这是下一个最受ANSI/广泛支持的方法。

您可以使用KNIME中的旋转节点来执行该技巧。 只需选择Tag列作为Pivot列,Country列作为Group列,在Aggregation部分选择Weight列和作为Aggregation method sum。 再见,
Tobias

每当我读到pivot表时,它总是非常关注聚合。我不知道他们能解决这样的问题。一个元素的和就是那个元素。。。Duhun幸运的是我正在使用MySQL。我必须自动生成查询,因为大约有250个国家和200个标签。幸运的是,Knime有很好的数据透视支持,我只是不知道它适用于这种情况。@OMG Pnies:您也可以发布t-SQL语法吗?我猜有些人可能也对Oracle感兴趣。@PPC:以上内容在SQL Server、Oracle和PostgreSQL上都可以正常工作,无需修改。基本上,支持
大小写
语法的任何内容。我已经更新了这个问题,添加了pivot标记——任何人都可以寻找与他们选择的DB的组合,对pivot关键字的支持相对较新。