我有一个场景,我试图将数据从长到宽。(在 Windows 上使用 MariaDB 10.2 和 HeidiSQL 9.4)
基本上,我试图让每个“id”都有一行。
每个“id”可能有一个或多个“sqn”(对于每个 ID,它们始终是从 1 开始的序号。)我并不总是知道最大“sqn”数。
对于每个 id-sqn 组合,有一些列的值对于每个 'id' 都是恒定的——比如 'tpn'
对于每个“id”,每个“sqn”都有不同的值,例如“sqft”、“amnt”和“日期”
首先是起始表,第二个是我想要到达的地方:
╔═════╦═════╦═════╦══════╦══════╦═════════╗
║ 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)
谢谢!