Объединять и отображать записи из двух разных таблиц
Я должен создать представление, используя 2 таблицы
Таблица 1:
TokenNumber Symbol InstType LotSize TickSize sin ClosePrice
------------------------------------------------------------------------------------------
22 ACC EQ 1 0.01 INE012A01025 0
25 ADANIENT EQ 1 0.01 INE423A01024 0
Таблица 2:
TokenNumber InstType Symbol ExpiryDate CMToken sorted_index
---------------------------------------------------------------------------
46676 FUTSTK ACC 25-Jan-18 22 12
48205 FUTSTK ACC 28-Dec-17 22 8
4820546676 FUTSTK ACC 28-Dec-17 22 3
5361748205 FUTSTK ACC 30-Nov-17 22 1
53618 FUTSTK ADANIENT 30-Nov-17 25 3
4820646677 FUTSTK ADANIENT 28-Dec-17 25 3
48206 FUTSTK ADANIENT 28-Dec-17 25 8
46677 FUTSTK ADANIENT 25-Jan-18 25 12
Таким образом, для объединения обеих таблиц у нас есть первичный ключ Table1(TokenNumber) в Table2(CMToken).
Я должен показать все столбцы обеих таблиц и записей в определенном порядке (1-я запись из Table1 и следующие все записи из Table2, где Table1.TokenNumber=Table2.CMToken).
Новый вид с порядком записи будет выглядеть так:
TokenNumber Symbol InstType LotSize TickSize Isin ClosePrice ExpiryDate sorted_index
--------------------------------------------------------------------------------------------------------------------
22 ACC EQ 1 0.01 INE012A01025 0 NULL NULL
46676 ACC FUTSTK NULL NULL NULL NULL 25-Jan-18 0
48205 ACC FUTSTK NULL NULL NULL NULL 28-Dec-17 1
4820546676 ACC FUTSTK NULL NULL NULL NULL 28-Dec-17 2
25 ADANIENT EQ 1 0.01 INE423A01024 0 NULL NULL
53618 ADANIENT FUTSTK NULL NULL NULL NULL 30-Nov-17 0
4820646677 ADANIENT FUTSTK NULL NULL NULL NULL 28-Dec-17 1
48206 ADANIENT FUTSTK NULL NULL NULL NULL 28-Dec-17 3
46677 ADANIENT FUTSTK NULL NULL NULL NULL 25-Jan-18 2
Пожалуйста, предложите запрос.
С уважением
1 ответ
Глядя на ваши образцы данных и вывод, я думаю, что вы действительно хотите назначить sorted_index
знак равно NULL
к значениям table1
а также sorted_index
знак равно row_number()
разделить на CMToken
и заказать по TokenNumber
начиная с 0
в table2
, После этого вы хотите отсортировать его, поместив строку table1
поверх связанных рядов table2
и среди table2
строки, вы хотите отсортировать по row_number()
,
SELECT TokenNumber
,Symbol
,InstType
,LotSize
,TickSize
,Isin
,ClosePrice
,Expiry_Date
,sorted_index
FROM (
SELECT TokenNumber
,Symbol
,InstType
,LotSize
,TickSize
,Isin
,ClosePrice
,NULL AS Expiry_Date
,NULL AS sorted_index
,TokenNumber AS CMToken
FROM table1 t1
UNION ALL
SELECT TokenNumber
,InstType
,Symbol
,NULL
,NULL
,NULL
,NULL
,ExpiryDate
,row_number() OVER (
PARTITION BY CMToken ORDER BY TokenNumber
) - 1 AS sorted_index
,CMToken
FROM table2 t2
) t
ORDER BY CMToken
,sorted_index
Результат:
+-------------+----------+----------+---------+----------+--------------+------------+---------------------+--------------+
| TokenNumber | Symbol | InstType | LotSize | TickSize | Isin | ClosePrice | Expiry_Date | sorted_index |
+-------------+----------+----------+---------+----------+--------------+------------+---------------------+--------------+
| 22 | ACC | EQ | 1 | 0,01 | INE012A01025 | 0 | NULL | NULL |
| 46676 | FUTSTK | ACC | NULL | NULL | NULL | NULL | 25.01.2018 00:00:00 | 0 |
| 48205 | FUTSTK | ACC | NULL | NULL | NULL | NULL | 28.12.2017 00:00:00 | 1 |
| 4820546676 | FUTSTK | ACC | NULL | NULL | NULL | NULL | 28.12.2017 00:00:00 | 2 |
| 5361748205 | FUTSTK | ACC | NULL | NULL | NULL | NULL | 30.11.2017 00:00:00 | 3 |
| 25 | ADANIENT | EQ | 1 | 0,01 | INE423A01024 | 0 | NULL | NULL |
| 46677 | FUTSTK | ADANIENT | NULL | NULL | NULL | NULL | 25.01.2018 00:00:00 | 0 |
| 48206 | FUTSTK | ADANIENT | NULL | NULL | NULL | NULL | 28.12.2017 00:00:00 | 1 |
| 53618 | FUTSTK | ADANIENT | NULL | NULL | NULL | NULL | 30.11.2017 00:00:00 | 2 |
| 4820646677 | FUTSTK | ADANIENT | NULL | NULL | NULL | NULL | 28.12.2017 00:00:00 | 3 |
+-------------+----------+----------+---------+----------+--------------+------------+---------------------+--------------+