我必须使用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
因此,为了连接两个表,我们在Table2(CMToken)中拥有Table1(TokenNumber)的主键。
我必须以特定的顺序显示表和记录的所有列(表1中的第一条记录,然后是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
请建议查询。
谢谢&此致
答案 0 :(得分:0)
查看您的示例数据和输出,我认为您确实希望将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 |
+-------------+----------+----------+---------+----------+--------------+------------+---------------------+--------------+
<强> DEMO 强>