1

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

谢谢!

4

0 回答 0