我正在构建一个模型,用产品自动填充(分页)目录。
我有一个正在运行的订单,每个产品应该收到的空间分配(1/8 1/4 1/2 3/4 1/1页)。
我需要有关如何将产品细分到页面上的想法。没有太多的空间浪费。
E.g。第1部分需要1/8页第2部分需要整页...正常逻辑会将第2部分放在下一页上。常识会将它们放在一起。 (这个例子会有很多变化)。
无法更改正在运行的订单。
由于
此处的数据样本:
CREATE TABLE #tt1
(
productid INT,
pages DECIMAL(4, 2),
pagination_order INT
)
INSERT INTO #tt1
SELECT 1006691,
0.125,
1
INSERT INTO #tt1
SELECT 1007836,
1,
2
INSERT INTO #tt1
SELECT 1005073,
0.125,
3
INSERT INTO #tt1
SELECT 1004985,
1,
4
INSERT INTO #tt1
SELECT 1007840,
0.5,
5
INSERT INTO #tt1
SELECT 1007841,
0.5,
6
INSERT INTO #tt1
SELECT 1008032,
1,
7
INSERT INTO #tt1
SELECT 1007845,
0.5,
8
INSERT INTO #tt1
SELECT 1006688,
0.25,
9
INSERT INTO #tt1
SELECT 1005890,
0.75,
10
INSERT INTO #tt1
SELECT 1006658,
0.5,
11
INSERT INTO #tt1
SELECT 1006654,
0.25,
12
INSERT INTO #tt1
SELECT 1006653,
0.5,
13
INSERT INTO #tt1
SELECT 1005066,
0.5,
14
INSERT INTO #tt1
SELECT 1006648,
0.25,
15
INSERT INTO #tt1
SELECT 1004970,
0.5,
16
INSERT INTO #tt1
SELECT 1004953,
0.25,
17
INSERT INTO #tt1
SELECT 1006024,
1,
18
INSERT INTO #tt1
SELECT 1007844,
0.5,
19
INSERT INTO #tt1
SELECT 1010035,
0.25,
20
INSERT INTO #tt1
SELECT 1010106,
0.25,
21
INSERT INTO #tt1
SELECT 1010036,
0.125,
22
INSERT INTO #tt1
SELECT 1010107,
0.25,
23
INSERT INTO #tt1
SELECT 1010004,
0.125,
24
INSERT INTO #tt1
SELECT 1010000,
0.5,
25
INSERT INTO #tt1
SELECT 1010003,
0.25,
26
INSERT INTO #tt1
SELECT 1007835,
0.25,
27
INSERT INTO #tt1
SELECT 1010116,
0.125,
28
INSERT INTO #tt1
SELECT 1010104,
0.25,
29
INSERT INTO #tt1
SELECT 1010033,
0.5,
30
INSERT INTO #tt1
SELECT 1010034,
0.5,
31
INSERT INTO #tt1
SELECT 1006590,
0.125,
32
INSERT INTO #tt1
SELECT 1008999,
0.25,
33
INSERT INTO #tt1
SELECT 1005080,
0.125,
34
INSERT INTO #tt1
SELECT 1006779,
0.5,
35
INSERT INTO #tt1
SELECT 1008989,
0.25,
36
INSERT INTO #tt1
SELECT 1005068,
0.5,
37
INSERT INTO #tt1
SELECT 1006650,
0.25,
38
INSERT INTO #tt1
SELECT 1005070,
0.5,
39
INSERT INTO #tt1
SELECT 1006693,
0.25,
40
INSERT INTO #tt1
SELECT 1007981,
0.25,
41
INSERT INTO #tt1
SELECT 1010022,
0.25,
42
INSERT INTO #tt1
SELECT 1009842,
0.5,
43
INSERT INTO #tt1
SELECT 1005069,
0.25,
44
INSERT INTO #tt1
SELECT 1000643,
0.25,
45
INSERT INTO #tt1
SELECT 1002611,
0.125,
46
INSERT INTO #tt1
SELECT 1000714,
1,
47
INSERT INTO #tt1
SELECT 1007983,
0.25,
48
INSERT INTO #tt1
SELECT 1006717,
0.25,
49
INSERT INTO #tt1
SELECT 1009846,
0.25,
50
INSERT INTO #tt1
SELECT 1009845,
0.25,
51
INSERT INTO #tt1
SELECT 1002559,
0.125,
52
INSERT INTO #tt1
SELECT 1010006,
0.25,
53
INSERT INTO #tt1
SELECT 1006742,
0.5,
54
INSERT INTO #tt1
SELECT 1004952,
1,
55
INSERT INTO #tt1
SELECT 1009855,
0.5,
56
INSERT INTO #tt1
SELECT 1009876,
0.75,
57
INSERT INTO #tt1
SELECT 1000556,
0.25,
58
INSERT INTO #tt1
SELECT 1010085,
0.125,
59
INSERT INTO #tt1
SELECT 1010086,
0.125,
60
INSERT INTO #tt1
SELECT 1000888,
0.125,
61
INSERT INTO #tt1
SELECT 1000672,
0.125,
62
INSERT INTO #tt1
SELECT 1010077,
0.125,
63
INSERT INTO #tt1
SELECT 1000550,
0.125,
64
INSERT INTO #tt1
SELECT 1000551,
0.125,
65
INSERT INTO #tt1
SELECT 1002409,
0.125,
66
INSERT INTO #tt1
SELECT 1002402,
0.25,
67
INSERT INTO #tt1
SELECT 1005870,
0.25,
68
INSERT INTO #tt1
SELECT 1006594,
0.125,
69
INSERT INTO #tt1
SELECT 1002494,
1,
70
INSERT INTO #tt1
SELECT 1002307,
0.125,
71
INSERT INTO #tt1
SELECT 1000662,
0.5,
72
INSERT INTO #tt1
SELECT 1002587,
0.25,
73
INSERT INTO #tt1
SELECT 1002563,
0.25,
74
INSERT INTO #tt1
SELECT 1000703,
0.5,
75
INSERT INTO #tt1
SELECT 1009404,
0.25,
76
INSERT INTO #tt1
SELECT 1000975,
0.25,
77
INSERT INTO #tt1
SELECT 1002562,
0.125,
78
INSERT INTO #tt1
SELECT 1000645,
1,
79
INSERT INTO #tt1
SELECT 1007980,
0.125,
80
INSERT INTO #tt1
SELECT 1002225,
0.25,
81
INSERT INTO #tt1
SELECT 1005092,
0.25,
82
INSERT INTO #tt1
SELECT 1009840,
0.25,
83
INSERT INTO #tt1
SELECT 1006649,
0.25,
84
INSERT INTO #tt1
SELECT 1004959,
0.25,
85
INSERT INTO #tt1
SELECT 1000604,
0.25,
86
INSERT INTO #tt1
SELECT 1005021,
0.25,
87
INSERT INTO #tt1
SELECT 1007846,
0.75,
88
INSERT INTO #tt1
SELECT 1002519,
0.125,
89
INSERT INTO #tt1
SELECT 1006675,
0.125,
90
INSERT INTO #tt1
SELECT 1000541,
0.125,
91
INSERT INTO #tt1
SELECT 1006676,
0.125,
92
INSERT INTO #tt1
SELECT 1006784,
0.125,
93
INSERT INTO #tt1
SELECT 1002357,
0.25,
94
INSERT INTO #tt1
SELECT 1002355,
0.5,
95
INSERT INTO #tt1
SELECT 1009841,
0.25,
96
INSERT INTO #tt1
SELECT 1009858,
0.125,
97
INSERT INTO #tt1
SELECT 1005866,
0.25,
98
INSERT INTO #tt1
SELECT 1005878,
0.125,
99
INSERT INTO #tt1
SELECT 1004962,
0.125,
100
INSERT INTO #tt1
SELECT 1006768,
0.25,
101
INSERT INTO #tt1
SELECT 1000704,
0.125,
102
INSERT INTO #tt1
SELECT 1000589,
0.125,
103
INSERT INTO #tt1
SELECT 1002276,
0.125,
104
INSERT INTO #tt1
SELECT 1000940,
0.125,
105
INSERT INTO #tt1
SELECT 1000648,
0.25,
106
INSERT INTO #tt1
SELECT 1000588,
0.25,
107
INSERT INTO #tt1
SELECT 1002560,
0.125,
108
INSERT INTO #tt1
SELECT 1001655,
0.5,
109
INSERT INTO #tt1
SELECT 1002580,
0.25,
110
INSERT INTO #tt1
SELECT 1004961,
0.125,
111
INSERT INTO #tt1
SELECT 1004986,
0.125,
112
INSERT INTO #tt1
SELECT 1002312,
0.125,
113
INSERT INTO #tt1
SELECT 1004918,
0.125,
114
INSERT INTO #tt1
SELECT 1000706,
0.5,
115
INSERT INTO #tt1
SELECT 1004958,
0.125,
116
INSERT INTO #tt1
SELECT 1002315,
0.5,
117
INSERT INTO #tt1
SELECT 1003026,
0.25,
118
INSERT INTO #tt1
SELECT 1010083,
0.125,
119
INSERT INTO #tt1
SELECT 1007902,
0.25,
120
INSERT INTO #tt1
SELECT 1010082,
0.125,
121
INSERT INTO #tt1
SELECT 1006620,
0.25,
122
INSERT INTO #tt1
SELECT 1007867,
0.125,
123
INSERT INTO #tt1
SELECT 1006740,
0.25,
124
INSERT INTO #tt1
SELECT 1007939,
0.125,
125
INSERT INTO #tt1
SELECT 1006642,
0.125,
126
INSERT INTO #tt1
SELECT 1006641,
0.125,
127
INSERT INTO #tt1
SELECT 1007938,
0.25,
128
INSERT INTO #tt1
SELECT 1010046,
0.25,
129
INSERT INTO #tt1
SELECT 1003014,
0.25,
130
INSERT INTO #tt1
SELECT 1003041,
0.125,
131
INSERT INTO #tt1
SELECT 1007866,
0.125,
132
INSERT INTO #tt1
SELECT 1003035,
0.125,
133
INSERT INTO #tt1
SELECT 1000857,
0.125,
134
INSERT INTO #tt1
SELECT 1000852,
0.125,
135
答案 0 :(得分:0)
如果我理解正确,那么我认为这会给你你想要的东西:
;WITH MyCTE AS
(
SELECT
productid,
pages,
SUM(pages) OVER (ORDER BY pagination_order) AS current_page_unrounded
FROM
#tt1
)
SELECT
productid,
pages,
CEILING(current_page_unrounded) AS page_number
FROM
MyCTE
SUM
的窗口使用可让您获得总计,然后您只需使用CEILING
向上舍入到产品出现的页码。
请注意,这将不惜一切代价保留分页顺序,因此不会对页面进行适当的优化。