PDA

View Full Version : How to union two tables without losing ordering



alex009988
09-27-2019, 07:11 AM
Hello I use this sql sheme


TABLE (... ORDER BY ...)
UNION
TABLE (... ORDER BY ...)


I have this two table

Selected_Elements






1-14.6.2017
-
-
-


1491219,95
1519
981,71
1


4540487,32
4273
1062,6
2


7793302,9
6484
1201,93
3


2007632,09
2313
867,98
4


3370946,87
2600
1296,52
5


3458361,78
2735
1264,48
6


and








15-31.6.2017
-
-
-


1912881,67
1819
1051,61
1


4874438,49
4572
1066,15
2


8925168,88
7427
1201,72
3


2318450,72
2736
847,39
4


3759952,25
2949
1274,99
5


1766691,22
1376
1283,93
6



but i get








1-14.6.2017
-
-
-


1491219,95
1519
981,71
1


15-31.6.2017
-
-
-


1766691,22
1376
1283,93
6


1912881,67
1819
1051,61
1


2007632,09
2313
867,98
4


2318450,72
2736
847,39
4


3370946,87
2600
1296,52
5


3458361,78
2735
1264,48
6


3759952,25
2949
1274,99
5


4540487,32
4273
1062,6
2


4874438,49
4572
1066,15
2


7793302,9
6484
1201,93
3


8925168,88
7427
1201,72
3


How to just join two tables without losing ordering?

alex009988
09-27-2019, 07:45 AM
with UNION ALL i get better result but stiil lose subordering.

Selected_Elements






1-14.6.2017
-
-
-


1491219,95
1519
981,71
1


2007632,09
2313
867,98
4


3370946,87
2600
1296,52
5


3458361,78
2735
1264,48
6


4540487,32
4273
1062,6
2


7793302,9
6484
1201,93
3


15-31.6.2017
-
-
-


1766691,22
1376
1283,93
6


1912881,67
1819
1051,61
1


2318450,72
2736
847,39
4


3759952,25
2949
1274,99
5


4874438,49
4572
1066,15
2


8925168,88
7427
1201,72
3

OBP
09-29-2019, 01:07 AM
Without the tables it is difficult to test anything, but I can suggest that you try places the first table order after the union, something like
TABLE (SELECT Round(Sum(test.MaxOfрубливкассувесьчек),2) AS СуммаЧека, COUNT(*) AS КолвоЧеков,Round(Sum(test.MaxOfрубливкассувесьчек)/COUNT(*),2) AS СредЗнач, 1 AS НомерСтанции FROM (SELECT Rosneft.TRANS_ID, Max(Rosneft.рубливкассувесьчек) AS MaxOfрубливкассувесьчек FROM Rosneft WHERE Month([ДатаОперации]) = 6 And Day([ДатаОперации]) >= 1 And Day([ДатаОперации]) <= 14 GROUP BY Rosneft.TRANS_ID, Rosneft.[Станция(номер)] HAVING (((Rosneft.[Станция(номер)])= 1 ))) AS test UNION SELECT Round(Sum(test.MaxOfрубливкассувесьчек),2) AS СуммаЧека, COUNT(*) AS КолвоЧеков,Round(Sum(test.MaxOfрубливкассувесьчек)/COUNT(*),2) AS СредЗнач, 2 AS НомерСтанции FROM (SELECT Rosneft.TRANS_ID, Max(Rosneft.рубливкассувесьчек) AS MaxOfрубливкассувесьчек FROM Rosneft WHERE Month([ДатаОперации]) = 6 And Day([ДатаОперации]) >= 1 And Day([ДатаОперации]) <= 14 GROUP BY Rosneft.TRANS_ID, Rosneft.[Станция(номер)] HAVING (((Rosneft.[Станция(номер)])= 2 ))) AS test UNION SELECT Round(Sum(test.MaxOfрубливкассувесьчек),2) AS СуммаЧека, COUNT(*) AS КолвоЧеков,Round(Sum(test.MaxOfрубливкассувесьчек)/COUNT(*),2) AS СредЗнач, 3 AS НомерСтанции FROM (SELECT Rosneft.TRANS_ID, Max(Rosneft.рубливкассувесьчек) AS MaxOfрубливкассувесьчек FROM Rosneft WHERE Month([ДатаОперации]) = 6 And Day([ДатаОперации]) >= 1 And Day([ДатаОперации]) <= 14 GROUP BY Rosneft.TRANS_ID, Rosneft.[Станция(номер)] HAVING (((Rosneft.[Станция(номер)])= 3 ))) AS test UNION SELECT Round(Sum(test.MaxOfрубливкассувесьчек),2) AS СуммаЧека, COUNT(*) AS КолвоЧеков,Round(Sum(test.MaxOfрубливкассувесьчек)/COUNT(*),2) AS СредЗнач, 4 AS НомерСтанции FROM (SELECT Rosneft.TRANS_ID, Max(Rosneft.рубливкассувесьчек) AS MaxOfрубливкассувесьчек FROM Rosneft WHERE Month([ДатаОперации]) = 6 And Day([ДатаОперации]) >= 1 And Day([ДатаОперации]) <= 14 GROUP BY Rosneft.TRANS_ID, Rosneft.[Станция(номер)] HAVING (((Rosneft.[Станция(номер)])= 4 ))) AS test UNION SELECT Round(Sum(test.MaxOfрубливкассувесьчек),2) AS СуммаЧека, COUNT(*) AS КолвоЧеков,Round(Sum(test.MaxOfрубливкассувесьчек)/COUNT(*),2) AS СредЗнач, 5 AS НомерСтанции FROM (SELECT Rosneft.TRANS_ID, Max(Rosneft.рубливкассувесьчек) AS MaxOfрубливкассувесьчек FROM Rosneft WHERE Month([ДатаОперации]) = 6 And Day([ДатаОперации]) >= 1 And Day([ДатаОперации]) <= 14 GROUP BY Rosneft.TRANS_ID, Rosneft.[Станция(номер)] HAVING (((Rosneft.[Станция(номер)])= 5 ))) AS test UNION SELECT Round(Sum(test.MaxOfрубливкассувесьчек),2) AS СуммаЧека, COUNT(*) AS КолвоЧеков,Round(Sum(test.MaxOfрубливкассувесьчек)/COUNT(*),2) AS СредЗнач, 6 AS НомерСтанции FROM (SELECT Rosneft.TRANS_ID, Max(Rosneft.рубливкассувесьчек) AS MaxOfрубливкассувесьчек FROM Rosneft WHERE Month([ДатаОперации]) = 6 And Day([ДатаОперации]) >= 1 And Day([ДатаОперации]) <= 14 GROUP BY Rosneft.TRANS_ID, Rosneft.[Станция(номер)] HAVING (((Rosneft.[Станция(номер)])= 6 ))) AS test UNION SELECT '1-14.6.2017' AS СуммаЧека,'-' AS КолвоЧеков,'-' AS СредЗнач, '-' AS НомерСтанции FROM Rosneft)
UNION
TABLE (SELECT Round(Sum(test.MaxOfрубливкассувесьчек),2) AS СуммаЧека, COUNT(*) AS КолвоЧеков,Round(Sum(test.MaxOfрубливкассувесьчек)/COUNT(*),2) AS СредЗнач, 1 AS НомерСтанции FROM (SELECT Rosneft.TRANS_ID, Max(Rosneft.рубливкассувесьчек) AS MaxOfрубливкассувесьчек FROM Rosneft WHERE Month([ДатаОперации]) = 6 And Day([ДатаОперации]) >= 15 And Day([ДатаОперации]) <= 31 GROUP BY Rosneft.TRANS_ID, Rosneft.[Станция(номер)] HAVING (((Rosneft.[Станция(номер)])= 1 ))) AS test UNION SELECT Round(Sum(test.MaxOfрубливкассувесьчек),2) AS СуммаЧека, COUNT(*) AS КолвоЧеков,Round(Sum(test.MaxOfрубливкассувесьчек)/COUNT(*),2) AS СредЗнач, 2 AS НомерСтанции FROM (SELECT Rosneft.TRANS_ID, Max(Rosneft.рубливкассувесьчек) AS MaxOfрубливкассувесьчек FROM Rosneft WHERE Month([ДатаОперации]) = 6 And Day([ДатаОперации]) >= 15 And Day([ДатаОперации]) <= 31 GROUP BY Rosneft.TRANS_ID, Rosneft.[Станция(номер)] HAVING (((Rosneft.[Станция(номер)])= 2 ))) AS test UNION SELECT Round(Sum(test.MaxOfрубливкассувесьчек),2) AS СуммаЧека, COUNT(*) AS КолвоЧеков,Round(Sum(test.MaxOfрубливкассувесьчек)/COUNT(*),2) AS СредЗнач, 3 AS НомерСтанции FROM (SELECT Rosneft.TRANS_ID, Max(Rosneft.рубливкассувесьчек) AS MaxOfрубливкассувесьчек FROM Rosneft WHERE Month([ДатаОперации]) = 6 And Day([ДатаОперации]) >= 15 And Day([ДатаОперации]) <= 31 GROUP BY Rosneft.TRANS_ID, Rosneft.[Станция(номер)] HAVING (((Rosneft.[Станция(номер)])= 3 ))) AS test UNION SELECT Round(Sum(test.MaxOfрубливкассувесьчек),2) AS СуммаЧека, COUNT(*) AS КолвоЧеков,Round(Sum(test.MaxOfрубливкассувесьчек)/COUNT(*),2) AS СредЗнач, 4 AS НомерСтанции FROM (SELECT Rosneft.TRANS_ID, Max(Rosneft.рубливкассувесьчек) AS MaxOfрубливкассувесьчек FROM Rosneft WHERE Month([ДатаОперации]) = 6 And Day([ДатаОперации]) >= 15 And Day([ДатаОперации]) <= 31 GROUP BY Rosneft.TRANS_ID, Rosneft.[Станция(номер)] HAVING (((Rosneft.[Станция(номер)])= 4 ))) AS test UNION SELECT Round(Sum(test.MaxOfрубливкассувесьчек),2) AS СуммаЧека, COUNT(*) AS КолвоЧеков,Round(Sum(test.MaxOfрубливкассувесьчек)/COUNT(*),2) AS СредЗнач, 5 AS НомерСтанции FROM (SELECT Rosneft.TRANS_ID, Max(Rosneft.рубливкассувесьчек) AS MaxOfрубливкассувесьчек FROM Rosneft WHERE Month([ДатаОперации]) = 6 And Day([ДатаОперации]) >= 15 And Day([ДатаОперации]) <= 31 GROUP BY Rosneft.TRANS_ID, Rosneft.[Станция(номер)] HAVING (((Rosneft.[Станция(номер)])= 5 ))) AS test UNION SELECT Round(Sum(test.MaxOfрубливкассувесьчек),2) AS СуммаЧека, COUNT(*) AS КолвоЧеков,Round(Sum(test.MaxOfрубливкассувесьчек)/COUNT(*),2) AS СредЗнач, 6 AS НомерСтанции FROM (SELECT Rosneft.TRANS_ID, Max(Rosneft.рубливкассувесьчек) AS MaxOfрубливкассувесьчек FROM Rosneft WHERE Month([ДатаОперации]) = 6 And Day([ДатаОперации]) >= 15 And Day([ДатаОперации]) <= 31 GROUP BY Rosneft.TRANS_ID, Rosneft.[Станция(номер)] HAVING (((Rosneft.[Станция(номер)])= 6 ))) AS test UNION SELECT '15-31.6.2017' AS СуммаЧека,'-' AS КолвоЧеков,'-' AS СредЗнач, '-' AS НомерСтанции FROM Rosneft
ORDER BY table1.НомерСтанции, table2.НомерСтанции)

where table1 and table2 are the names of the tables.

I am an Access man, not an SQL man, so SQL is not my forte.

OBP
09-29-2019, 07:55 AM
ps you might have more answers if you ask the mods to move this and your other post to the SQL forum.