mysql基于两个列id透视/合并/将行移到列中

s1ag04yj  于 2021-06-23  发布在  Mysql
关注(0)|答案(0)|浏览(197)

我有一个场景,我试图把数据从长到宽(在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)
谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题