簡體   English   中英

使用帶有 SELECT 和 UNION 的 INSERT 語句將行號寫入表

[英]Write row number to table using INSERT statement with SELECT & UNION

我正在嘗試使用包含具有多個聯合的 SELECT 查詢的 INSERT 語句將基於列的連續行號寫入臨時表##TAX_TEMP。 但是,我得到每個 UNION 的重復序列,如下所示:

支付集團 BATCH_ID FILE_NBR PAY_NBR ENTRY_NBR PDE_TRANS_TYPE
GA5 MST_GA5PDE_07192022 000597 1 1
GA5 MST_GA5PDE_07192022 000597 2 1
GA5 MST_GA5PDE_07192022 000597 1 1
GA5 MST_GA5PDE_07192022 000597 2 1
國標 MST_GBZPDE_07192022 002418 1 1
國標 MST_GBZPDE_07192022 002418 2 1
國標 MST_GBZPDE_07192022 002418 1 1
國標 MST_GBZPDE_07192022 002418 2 1

我在哪里尋找它根據FILE_NBR列順序寫入,如下所示:

支付集團 BATCH_ID FILE_NBR PAY_NBR ENTRY_NBR PDE_TRANS_TYPE
GA5 MST_GA5PDE_07192022 000597 1 1
GA5 MST_GA5PDE_07192022 000597 2 1
GA5 MST_GA5PDE_07192022 000597 3 1
GA5 MST_GA5PDE_07192022 000597 4 1
國標 MST_GBZPDE_07192022 002418 1 1
國標 MST_GBZPDE_07192022 002418 2 1
國標 MST_GBZPDE_07192022 002418 3 1
國標 MST_GBZPDE_07192022 002418 4 1

對上述結果的查詢是:

             SELECT PAYGROUP,
                    BATCH_ID,
                    FILE_NUM,
                    ROW_NUMBER() OVER (ORDER BY FILE_NBR),
                    ENTRY_NBR,
                    PDE_TRANS_TYPE,

我嘗試了以下操作:

INSERT INTO ##TAX_TEMP
    SELECT ROW_NUMBER() OVER (ORDER BY FILE_NBR) as 'PAY_NBR', * FROM (
                   SELECT PAYGROUP, BATCH_ID, FILE_NBR, ENTRY_NBR, PDE_TRANSTYPE
                   FROM TAX_TABLE
)

但是我收到了一個語法錯誤,它需要一個“as”或 QUOTED_ID

以供將來參考,發布您遇到的完整錯誤消息 - 不是縮寫的。 接下來,您嘗試使用派生表(括號中的 SELECT 語句)沒有任何用處。 您可以為它添加一個別名來解決錯誤,但為什么要為增加的復雜性而煩惱。 所以試試:

INSERT INTO ##TAX_TEMP (...) 
SELECT ROW_NUMBER() OVER (ORDER BY FILE_NBR) as PAY_NBR, 
       PAYGROUP, BATCH_ID, FILE_NBR, ENTRY_NBR, PDE_TRANSTYPE 
FROM dbo.TAX_TABLE;

我做了一些小的改變來實現更好的習慣。 模式限定表。 不要使用單引號來定義別名。 始終為 INSERT 和 SELECT 語句提供完整的列列表。 終止每個語句。 更好的習慣會產生更好的代碼。

為了解決您的編號問題,您似乎需要將分區添加到您的 ROW_NUMBER 使用中。 具體如何做到這一點尚不清楚。 您提到 UNION 但您的查詢沒有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM