合并与显示来自两个不同表的记录

时间:2017-11-16 06:36:09

标签: sql sql-server-2012-localdb

我必须使用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

请建议查询。

谢谢&此致

1 个答案:

答案 0 :(得分:0)

查看您的示例数据和输出,我认为您确实希望将sorted_index = NULL分配给table1sorted_index = row_number()的值按CMToken分区,TokenNumber0开始到table2。之后,您希望通过在table1table2行的关联行之上放置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