我有一个场景,我试图将数据从长到宽。 (在Windows上使用MariaDB 10.2和HeidiSQL 9.4)
基本上,我试图让每个'id'都有一行。
每个'id'可能有一个或多个'sqn'(对于从1开始的每个ID,它们总是序号。)我并不总是知道最大'sqn'数。
对于每个id-sqn组合,有一些列的值为每个'id'的常量 - 如'tpn'
对于每个'id',还有其他每个'sqn'都有不同的值 - 例如'sqft','amnt'和'date'
首先是起始表,第二个是我要去的地方:
╔═════╦═════╦═════╦══════╦══════╦═════════╗
║ id ║ sqn ║ tpn ║ sqft ║ amnt ║ date ║
╠═════╬═════╬═════╬══════╬══════╬═════════╣
║ 1 ║ 1 ║ 821 ║ 110 ║ 101 ║ 1/1/00 ║
║ 1 ║ 2 ║ 821 ║ 150 ║ 195 ║ NULL ║
║ 2 ║ 1 ║ 551 ║ NULL ║ 65 ║ 6/1/15 ║
║ 2 ║ 2 ║ 551 ║ 900 ║ 190 ║ 1/1/01 ║
║ 2 ║ 3 ║ 551 ║ 220 ║ 110 ║ 1/1/05 ║
║ 3 ║ 1 ║ 821 ║ 900 ║ 44 ║ 7/1/12 ║
╚═════╩═════╩═════╩══════╩══════╩═════════╝
╔═════╦═══════╦══════╦═══════╦════════╦═══════╦═══════╦═════════╦════════
║ id ║ sqft1 ║ tpn ║ amnt1 ║ date1 ║ sqft2 ║ amnt2 ║ date2 ║ sqft3...
╠═════╬═══════╬══════╬═══════╬════════╬═══════╬═══════╬═════════╬════════
║ 1 ║ 110 ║ 821 ║ 101 ║ 1/1/00 ║ 150 ║ 195 ║ NULL ║ NULL
║ 2 ║ NULL ║ 551 ║ 65 ║ 6/1/15 ║ 900 ║ 190 ║ 1/1/01 ║ 220
║ 3 ║ 900 ║ 821 ║ 44 ║ 7/1/12 ║ NULL ║ NULL ║ NULL ║ NULL
╚═════╩═══════╩══════╩═══════╩════════╩═══════╩═══════╩═════════╩═════════
当然,我可以通过查看每个表格实例来查看最大'sqn'然后只需手动移动它就可以完成手动操作...
但我有成千上万的这些类型的表经常更新(我不能改变我得到的数据的形式 - 我只能消耗它,而不是在前端设计它。)我尝试了数据透视表建议的变体 - 但是当同时使用'id'和'sqn'时我会被卡住(比如http://sqlfiddle.com/#!9/09408/2/4)
谢谢!