我有一个场景,我试图把数据从长到宽(在windows上使用mariadb 10.2和heidisql 9.4)
基本上,我想让每个“id”都有一行。
每个“id”可能有一个或多个“sqn”(每个id总是从1开始的序列号)。我并不总是知道最大的“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)
谢谢!
暂无答案!
目前还没有任何答案,快来回答吧!