mySQL根据两个列ID

时间:2018-05-28 00:26:54

标签: mysql sql mariadb mariasql

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

谢谢!

0 个答案:

没有答案