【发布时间】:2020-06-02 20:06:15
【问题描述】:
如果标题令人困惑,我很抱歉。我有一个非常大的源表,其结构有点像这样
From Mile | To Mile |
| |From Weight| 1000 | 1100 | 1200 | 1300... | 22500 | 23000
| |To Weight | 1099 | 1199 | 1299 | 1499... | 22999 | 23499
==========================================================================
1 | 20 | | 1500 | 1505 | 1489 | 1854... | 3400 | 2990
------------------------------------------------------------------------
21 | 40 | | 1400 | 1705 | 491 | 5581... | 1600 | 2989
------------------------------------------------------------------------
41 | 60 | | 1800 | 1635 | 1982 | 1888... | 3200 | 3480
------------------------------------------------------------------------
人们可以选择特定里程的地方,例如23,以及一定的重量,例如1250,并获得一个“比率”——在本例中为 491。
From Mile | To Mile |
| |From Weight| | | 1200 | | |
| |To Weight | | | 1299 | | |
==========================================================================
| | | | | | ... | |
------------------------------------------------------------------------
21 | 40 | | | | 491 | ... | |
------------------------------------------------------------------------
| | | | | | ... | |
------------------------------------------------------------------------
我想插入每个费率及其相应的重量和英里范围。
Id | Mile_To | Mile_From | Weight_To | Weight_From | Rate
===========================================================
0 | 1 | 20 | 1000 | 1099 | 1500
-----------------------------------------------------------
1 | 1 | 20 | 1100 | 1199 | 1505
-----------------------------------------------------------
2 | 1 | 20 | 1200 | 1299 | 1389
-----------------------------------------------------------
3 | 1 | 20 | 1300 | 1499 | 1854
-----------------------------------------------------------
...
-----------------------------------------------------------
40 | 1 | 20 | 22500 | 22999 | 3400
-----------------------------------------------------------
41 | 1 | 20 | 23000 | 23499 | 2990
-----------------------------------------------------------
42 | 21 | 40 | 1000 | 1199 | 1400
单步执行源表并按上述格式插入数据的最佳方法是什么?大约有数百行和列,因此命名每一列类似于手动输入数据。
这是一个带有源表示例的 SQLFiddle:http://sqlfiddle.com/#!18/48777a/1
【问题讨论】:
-
我不会给出完整的答案,但这里有一个提示:使用 CROSS JOIN 生成表。如果“重量类别”与示例中的一样可预测(步数为 1000),您可能可以生成一系列重量类别,生成一系列英里类别,然后交叉连接这些以创建您的结果表。唯一复杂的部分是填写“rate”列,这将是一个相当丑陋的源表 JOIN。
-
@workerjoe 感谢您的帮助,下面发布了一个 CROSS JOIN 答案,效果很好!
标签: sql sql-server pivot sql-insert unpivot