对于SQL语言大师......一个挑战。希望不要太难。如果我的数据包含资产标识符,后跟该资产的200个数据元素......哪些SQL代码段会将其转换为垂直格式?
电流:
列名:
Asset ID, Column Header 1, Column Header 2, ... Column Header "n"
数据行:
abc123, 1234, 2345, 3456, ...
所需:
Asset ID, Column Header 1, 1234
Asset ID, Column Header 2, 2345
Asset ID, Column Header 3, 3456
...
Asset ID, Column Header n, 9876
我正在使用的SQL实现(基于Bluemix中的DB2的DashDB)不支持“pivot”命令。如果列标题发生更改,或者将其他列添加到“当前”数据格式,我希望代码段能够保持不变。即我宁愿不硬编码到固定的列列表。
你怎么看?可以使用SQL代码片段完成吗?谢谢!
答案 0 :(得分:0)
规范方式是\%APPDATA%\MySQL\Workbench\log\sql_actions_unconnected.log
:
union all
还有其他方法,但这通常是最简单的代码。它需要为每列读取一次表,这可能是一个问题。
注意:您可以使用电子表格和公式构建此类查询。或者,甚至使用另一个SQL查询构建它。
答案 1 :(得分:0)
您可以通过为每一行组成一个旋转表并在源表和组合表之间执行笛卡尔积来实现此目的:
SELECT assetId, colname, colvalue
FROM yourtable T,
TABLE(VALUES ('ColumnHeader1', T.ColumnHeader1),
('ColumnHeader2', T.ColumnHeader2),
('ColumnHeader3', T.ColumnHeader3),
...
('ColumnHeaderN', T.ColumnHeaderN)
) as pivot(colname, colvalue);
这只需要对 yourtable 进行一次扫描,因此非常有效。