我创建了一些带有随机值的临时表,以说明:
create table #A
(
Client int,
Consumption1 int,
Consumption2 int,
Consumption3 int,
Consumption4 int,
Consumption5 int,
Consumption6 int,
Consumption7 int,
Consumption8 int,
Consumption9 int,
Consumption10 int,
Consumption11 int,
Consumption12 int,
Consumption13 int,
Consumption14 int,
Consumption15 int,
Consumption16 int,
Consumption17 int,
Consumption18 int,
Consumption19 int,
Consumption20 int,
Consumption21 int,
Consumption22 int,
Consumption23 int,
Consumption24 int,
Consumption25 int,
Consumption26 int,
Consumption27 int,
Consumption28 int
)
create table #B
(
Client int,
Arrive1 int,
Arrive2 int,
Arrive3 int,
Arrive4 int,
Arrive5 int,
Arrive6 int,
Arrive7 int,
Arrive8 int,
Arrive9 int,
Arrive10 int,
Arrive11 int,
Arrive12 int,
Arrive13 int,
Arrive14 int,
Arrive15 int,
Arrive16 int,
Arrive17 int,
Arrive18 int,
Arrive19 int,
Arrive20 int,
Arrive21 int,
Arrive22 int,
Arrive23 int,
Arrive24 int,
Arrive25 int,
Arrive26 int,
Arrive27 int,
Arrive28 int
)
create table #C
(
Client int,
Stock1 int,
Stock2 int,
Stock3 int,
Stock4 int,
Stock5 int,
Stock6 int,
Stock7 int,
Stock8 int,
Stock9 int,
Stock10 int,
Stock11 int,
Stock12 int,
Stock13 int,
Stock14 int,
Stock15 int,
Stock16 int,
Stock17 int,
Stock18 int,
Stock19 int,
Stock20 int,
Stock21 int,
Stock22 int,
Stock23 int,
Stock24 int,
Stock25 int,
Stock26 int,
Stock27 int,
Stock28 int
)
insert into #A values
(4587, 1897163, 1750380, 5487230, 5086290, 3232280, 6014338, 5978823, 5864160, 8462496, 3945424, 6641780, 6268308, 924802, 9246014, 8089559, 6079526, 7332457, 4971714, 379325, 1651062, 5878994, 4987033, 9802665, 8163241, 180040, 3309288, 6966085, 6791869),
(1056, 3693126, 6085435, 2576225, 906414, 9308827, 7912118, 4690652, 2298023, 5333767, 1550576, 3324191, 8750357, 2135258, 3403408, 6807101, 1750717, 8367234, 5176016, 1008922, 9641689, 3564379, 5398274, 4521049, 5767916, 779819, 5466675, 4020480, 7245496),
(8977, 6496397, 7097447, 5026248, 3686617, 4583368, 4018366, 5718120, 318667, 2281474, 4044423, 9424092, 5355506, 7723824, 8635663, 7122301, 3401243, 2478769, 6540496, 8370652, 268827, 8858460, 4468893, 2184993, 416313, 5099858, 170593, 6609073, 7137023)
insert into #B values
(4587, 2667122, 2542268, 1118532, 2284504, 2147917, 1084679, 2729616, 1175793, 2649496, 1699428, 507390, 108714, 828544, 1358961, 1754942, 2084233, 1964319, 1751282, 2047706, 705322, 2918377, 1001676, 1494300, 2937679, 2216776, 2485884, 1217744, 366044),
(1056, 213746, 483120, 1689874, 2063834, 473576, 2063958, 2212633, 819822, 1569991, 1159024, 479248, 495937, 1923624, 1557142, 1164307, 2669944, 2161610, 1187291, 1083194, 1947235, 136211, 1749596, 692847, 1947817, 207300, 2784799, 2061996, 1248644),
(8977, 2085112, 2935995, 1977982, 633723, 2426369, 1156016, 1011041, 470338, 926361, 1244144, 625813, 945190, 1217648, 376607, 89393, 2944627, 1118893, 2939117, 213832, 2269515, 2261478, 1637021, 1961149, 1145781, 206511, 1563378, 1272576, 212847)
insert into #C values
(4587, 806, 797, 310, 784, 411, 629, 966, 134, 963, 313, 160, 136, 620, 690, 945, 649, 718, 207, 457, 125, 311, 911, 799, 629, 404, 510, 650, 793),
(1056, 599, 411, 843, 311, 752, 560, 797, 304, 805, 289, 476, 535, 315, 336, 805, 487, 820, 125, 589, 269, 415, 409, 329, 245, 316, 737, 561, 176),
(8977, 841, 583, 833, 372, 374, 776, 152, 676, 854, 404, 517, 571, 694, 315, 315, 116, 163, 948, 598, 681, 226, 691, 684, 372, 450, 772, 646, 581)
例如,如果您知道每个可能的Client
值都会存在于消耗表中,则只需对字段求和并连接表即可:
select
con.Client,
sto.Stock1 + sto.Stock2 + sto.Stock3 + sto.Stock4 + sto.Stock5 + sto.Stock6 + sto.Stock7 + sto.Stock8 + sto.Stock9 + sto.Stock10 + sto.Stock11 + sto.Stock12 + sto.Stock13 + sto.Stock14 + sto.Stock15 + sto.Stock16 + sto.Stock17 + sto.Stock18 + sto.Stock19 + sto.Stock20 + sto.Stock21 + sto.Stock22 + sto.Stock23 + sto.Stock24 + sto.Stock25 + sto.Stock26 + sto.Stock27 + sto.Stock28 as Stock,
con.Consumption1 + con.Consumption2 + con.Consumption3 + con.Consumption4 + con.Consumption5 + con.Consumption6 + con.Consumption7 + con.Consumption8 + con.Consumption9 + con.Consumption10 + con.Consumption11 + con.Consumption12 + con.Consumption13 + con.Consumption14 + con.Consumption15 + con.Consumption16 + con.Consumption17 + con.Consumption18 + con.Consumption19 + con.Consumption20 + con.Consumption21 + con.Consumption22 + con.Consumption23 + con.Consumption24 + con.Consumption25 + con.Consumption26 + con.Consumption27 + con.Consumption28 as Consumption,
arr.Arrive1 + arr.Arrive2 + arr.Arrive3 + arr.Arrive4 + arr.Arrive5 + arr.Arrive6 + arr.Arrive7 + arr.Arrive8 + arr.Arrive9 + arr.Arrive10 + arr.Arrive11 + arr.Arrive12 + arr.Arrive13 + arr.Arrive14 + arr.Arrive15 + arr.Arrive16 + arr.Arrive17 + arr.Arrive18 + arr.Arrive19 + arr.Arrive20 + arr.Arrive21 + arr.Arrive22 + arr.Arrive23 + arr.Arrive24 + arr.Arrive25 + arr.Arrive26 + arr.Arrive27 + arr.Arrive28 as Arrive
from #A con
left join #B arr on con.Client = arr.Client
left join #C sto on con.Client = sto.Client
如果一个客户端可能只存在于一个或两个表中,而您不知道是哪一个(S),那么您需要首先区分客户端列表:
select
cli.Client,
sto.Stock1 + sto.Stock2 + sto.Stock3 + sto.Stock4 + sto.Stock5 + sto.Stock6 + sto.Stock7 + sto.Stock8 + sto.Stock9 + sto.Stock10 + sto.Stock11 + sto.Stock12 + sto.Stock13 + sto.Stock14 + sto.Stock15 + sto.Stock16 + sto.Stock17 + sto.Stock18 + sto.Stock19 + sto.Stock20 + sto.Stock21 + sto.Stock22 + sto.Stock23 + sto.Stock24 + sto.Stock25 + sto.Stock26 + sto.Stock27 + sto.Stock28 as Stock,
con.Consumption1 + con.Consumption2 + con.Consumption3 + con.Consumption4 + con.Consumption5 + con.Consumption6 + con.Consumption7 + con.Consumption8 + con.Consumption9 + con.Consumption10 + con.Consumption11 + con.Consumption12 + con.Consumption13 + con.Consumption14 + con.Consumption15 + con.Consumption16 + con.Consumption17 + con.Consumption18 + con.Consumption19 + con.Consumption20 + con.Consumption21 + con.Consumption22 + con.Consumption23 + con.Consumption24 + con.Consumption25 + con.Consumption26 + con.Consumption27 + con.Consumption28 as Consumption,
arr.Arrive1 + arr.Arrive2 + arr.Arrive3 + arr.Arrive4 + arr.Arrive5 + arr.Arrive6 + arr.Arrive7 + arr.Arrive8 + arr.Arrive9 + arr.Arrive10 + arr.Arrive11 + arr.Arrive12 + arr.Arrive13 + arr.Arrive14 + arr.Arrive15 + arr.Arrive16 + arr.Arrive17 + arr.Arrive18 + arr.Arrive19 + arr.Arrive20 + arr.Arrive21 + arr.Arrive22 + arr.Arrive23 + arr.Arrive24 + arr.Arrive25 + arr.Arrive26 + arr.Arrive27 + arr.Arrive28 as Arrive
from
(
select con.Client from #A con
union
select arr.Client from #B arr
union
select sto.Client from #C sto
) cli
left join #A con on cli.Client = con.Client
left join #B arr on cli.Client = arr.Client
left join #C sto on cli.Client = sto.Client
然而,正如 comments 中指出的那样,这个表的设计似乎相当糟糕,可能应该更改,例如:
Client |
ValueNumber |
Consumption |
4587 |
1 |
1897163 |
4587 |
2 |
1750380 |
4587 |
3 |
5487230 |
4587 |
4 |
5086290 |
4587 |
5 |
3232280 |
4587 |
6 |
6014338 |
4587 |
7 |
5978823 |
4587 |
8 |
5864160 |
4587 |
9 |
8462496 |
4587 |
10 |
3945424 |
4587 |
11 |
6641780 |
4587 |
12 |
6268308 |
4587 |
13 |
924802 |
4587 |
14 |
9246014 |
4587 |
15 |
8089559 |
4587 |
16 |
6079526 |
4587 |
17 |
7332457 |
4587 |
18 |
4971714 |
4587 |
19 |
379325 |
4587 |
20 |
1651062 |
4587 |
21 |
5878994 |
4587 |
22 |
4987033 |
4587 |
23 |
9802665 |
4587 |
24 |
8163241 |
4587 |
25 |
180040 |
4587 |
26 |
3309288 |
4587 |
27 |
6966085 |
4587 |
28 |
6791869 |
1056 |
1 |
3693126 |
1056 |
2 |
6085435 |
1056 |
3 |
2576225 |
1056 |
4 |
906414 |
1056 |
5 |
9308827 |
1056 |
6 |
7912118 |
1056 |
7 |
4690652 |
1056 |
8 |
2298023 |
1056 |
9 |
5333767 |
1056 |
10 |
1550576 |
1056 |
11 |
3324191 |
1056 |
12 |
8750357 |
1056 |
13 |
2135258 |
1056 |
14 |
3403408 |
1056 |
15 |
6807101 |
1056 |
16 |
1750717 |
1056 |
17 |
8367234 |
1056 |
18 |
5176016 |
1056 |
19 |
1008922 |
1056 |
20 |
9641689 |
1056 |
21 |
3564379 |
1056 |
22 |
5398274 |
1056 |
23 |
4521049 |
1056 |
24 |
5767916 |
1056 |
25 |
779819 |
1056 |
26 |
5466675 |
1056 |
27 |
4020480 |
1056 |
28 |
7245496 |
8977 |
1 |
6496397 |
8977 |
2 |
7097447 |
8977 |
3 |
5026248 |
8977 |
4 |
3686617 |
8977 |
5 |
4583368 |
8977 |
6 |
4018366 |
8977 |
7 |
5718120 |
8977 |
8 |
318667 |
8977 |
9 |
2281474 |
8977 |
10 |
4044423 |
8977 |
11 |
9424092 |
8977 |
12 |
5355506 |
8977 |
13 |
7723824 |
8977 |
14 |
8635663 |
8977 |
15 |
7122301 |
8977 |
16 |
3401243 |
8977 |
17 |
2478769 |
8977 |
18 |
6540496 |
8977 |
19 |
8370652 |
8977 |
20 |
268827 |
8977 |
21 |
8858460 |
8977 |
22 |
4468893 |
8977 |
23 |
2184993 |
8977 |
24 |
416313 |
8977 |
25 |
5099858 |
8977 |
26 |
170593 |
8977 |
27 |
6609073 |
8977 |
28 |
7137023 |
甚至:
Client |
ValueNumber |
Stock |
Consumption |
Arrive |
4587 |
1 |
806 |
1897163 |
2667122 |
4587 |
2 |
797 |
1750380 |
2542268 |
4587 |
3 |
310 |
5487230 |
1118532 |
4587 |
4 |
784 |
5086290 |
2284504 |
4587 |
5 |
411 |
3232280 |
2147917 |
4587 |
6 |
629 |
6014338 |
1084679 |
4587 |
7 |
966 |
5978823 |
2729616 |
4587 |
8 |
134 |
5864160 |
1175793 |
4587 |
9 |
963 |
8462496 |
2649496 |
4587 |
10 |
313 |
3945424 |
1699428 |
4587 |
11 |
160 |
6641780 |
507390 |
4587 |
12 |
136 |
6268308 |
108714 |
4587 |
13 |
620 |
924802 |
828544 |
4587 |
14 |
690 |
9246014 |
1358961 |
4587 |
15 |
945 |
8089559 |
1754942 |
4587 |
16 |
649 |
6079526 |
2084233 |
4587 |
17 |
718 |
7332457 |
1964319 |
4587 |
18 |
207 |
4971714 |
1751282 |
4587 |
19 |
457 |
379325 |
2047706 |
4587 |
20 |
125 |
1651062 |
705322 |
4587 |
21 |
311 |
5878994 |
2918377 |
4587 |
22 |
911 |
4987033 |
1001676 |
4587 |
23 |
799 |
9802665 |
1494300 |
4587 |
24 |
629 |
8163241 |
2937679 |
4587 |
25 |
404 |
180040 |
2216776 |
4587 |
26 |
510 |
3309288 |
2485884 |
4587 |
27 |
650 |
6966085 |
1217744 |
4587 |
28 |
793 |
6791869 |
366044 |
1056 |
1 |
599 |
3693126 |
213746 |
1056 |
2 |
411 |
6085435 |
483120 |
1056 |
3 |
843 |
2576225 |
1689874 |
1056 |
4 |
311 |
906414 |
2063834 |
1056 |
5 |
752 |
9308827 |
473576 |
1056 |
6 |
560 |
7912118 |
2063958 |
1056 |
7 |
797 |
4690652 |
2212633 |
1056 |
8 |
304 |
2298023 |
819822 |
1056 |
9 |
805 |
5333767 |
1569991 |
1056 |
10 |
289 |
1550576 |
1159024 |
1056 |
11 |
476 |
3324191 |
479248 |
1056 |
12 |
535 |
8750357 |
495937 |
1056 |
13 |
315 |
2135258 |
1923624 |
1056 |
14 |
336 |
3403408 |
1557142 |
1056 |
15 |
805 |
6807101 |
1164307 |
1056 |
16 |
487 |
1750717 |
2669944 |
1056 |
17 |
820 |
8367234 |
2161610 |
1056 |
18 |
125 |
5176016 |
1187291 |
1056 |
19 |
589 |
1008922 |
1083194 |
1056 |
20 |
269 |
9641689 |
1947235 |
1056 |
21 |
415 |
3564379 |
136211 |
1056 |
22 |
409 |
5398274 |
1749596 |
1056 |
23 |
329 |
4521049 |
692847 |
1056 |
24 |
245 |
5767916 |
1947817 |
1056 |
25 |
316 |
779819 |
207300 |
1056 |
26 |
737 |
5466675 |
2784799 |
1056 |
27 |
561 |
4020480 |
2061996 |
1056 |
28 |
176 |
7245496 |
1248644 |
8977 |
1 |
841 |
6496397 |
2085112 |
8977 |
2 |
583 |
7097447 |
2935995 |
8977 |
3 |
833 |
5026248 |
1977982 |
8977 |
4 |
372 |
3686617 |
633723 |
8977 |
5 |
374 |
4583368 |
2426369 |
8977 |
6 |
776 |
4018366 |
1156016 |
8977 |
7 |
152 |
5718120 |
1011041 |
8977 |
8 |
676 |
318667 |
470338 |
8977 |
9 |
854 |
2281474 |
926361 |
8977 |
10 |
404 |
4044423 |
1244144 |
8977 |
11 |
517 |
9424092 |
625813 |
8977 |
12 |
571 |
5355506 |
945190 |
8977 |
13 |
694 |
7723824 |
1217648 |
8977 |
14 |
315 |
8635663 |
376607 |
8977 |
15 |
315 |
7122301 |
89393 |
8977 |
16 |
116 |
3401243 |
2944627 |
8977 |
17 |
163 |
2478769 |
1118893 |
8977 |
18 |
948 |
6540496 |
2939117 |
8977 |
19 |
598 |
8370652 |
213832 |
8977 |
20 |
681 |
268827 |
2269515 |
8977 |
21 |
226 |
8858460 |
2261478 |
8977 |
22 |
691 |
4468893 |
1637021 |
8977 |
23 |
684 |
2184993 |
1961149 |
8977 |
24 |
372 |
416313 |
1145781 |
8977 |
25 |
450 |
5099858 |
206511 |
8977 |
26 |
772 |
170593 |
1563378 |
8977 |
27 |
646 |
6609073 |
1272576 |
8977 |
28 |
581 |
7137023 |
212847 |
在这种情况下,您的查询将变得简单得多:
select
Client,
sum(Stock) as Stock,
sum(Consumption) as Consumption,
sum(Arrive) as Arrive
from combined_table
group by Client