0

我必须使用 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 中的第一条记录和表 2 中的所有记录,其中 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

请提出查询。

感谢和问候

4

1 回答 1

0

查看您的示例数据和输出,我认为您实际上想将 = 分配给sorted_indexand =的值,并按从NULLto开始的顺序进行排序。之后,您想通过将行放在相关行的顶部和行之间来对其进行排序,您希望按 对其进行排序。table1sorted_indexrow_number()CMTokenTokenNumber0table2table1table2table2row_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            |
+-------------+----------+----------+---------+----------+--------------+------------+---------------------+--------------+

演示

于 2017-11-16T09:45:39.433 回答