T-Sql
根據行值將行拆分為多條記錄
我有一個訂單表(文本 customer_id,int total_orders),其中包含每個客戶的總訂單概覽統計資訊。
我想要做的是生成一個查詢輸出,它將一個客戶表示為他們所做的與此類似的每三個訂單的一行。
用
combined_key
作主鍵/唯一鍵,它只是 customer_key 和 count 組合,因為我不能使用自動編號。我知道如何確定我需要在查詢中包含哪些記錄,但我不知道如何根據需要拆分記錄。
select * from stats where order_count / 3
我已經包含了一個小提琴,請注意它在 MySQL 中,因為 T-SQL 不可用。
您可以將 db<>fiddle 用於 sql-server:
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=c87b972491dda6462cc4f8b80ff2bd95
這只是一個草圖。您需要無中生有(1 行 -> 3 行)。為此,您可以使用遞歸 CTE:
with gen (account_id, n, order_count) as ( select account_id, 1, order_count from stats union all select account_id, n+1, order_count from gen where n < order_count ) select n-2 as x, n as y, account_id, n from gen where n % 3 = 0 order by account_id, n;
我使用 mod(%) 來選擇每個 3:rd 行。
x y account_id n 1 3 1 3 4 6 1 6 7 9 1 9 1 3 2 3