T-Sql

根據行值將行拆分為多條記錄

  • January 18, 2019

我有一個訂單表(文本 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 &lt; 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

引用自:https://dba.stackexchange.com/questions/227482