Saat ini saya memiliki tabel ini:

Names
----------
Bill
James
----------

Tujuan saya di sini adalah untuk memasukkan nama-nama ini berulang kali ke dalam baris baru sesuai dengan panjangnya.

Sebagai contoh

Names
----------
Bill
Bill
Bill
Bill
James
James
James
James
James

P.S. Saya akan mencari tahu apakah ada cara untuk mengatasinya hanya dengan filter seperti where, having...etc atau tidak.

Terima kasih sebelumnya.

0
JMamurov 9 April 2021, 17:44

2 jawaban

Jawaban Terbaik

Anda dapat menggunakan CTE rekursif:

with cte as (
      select name, len(name) as n
      from t
      union all
      select name, n - 1
      from cte
      where n > 1
     )
select cte.name
from cte;

Ini adalah db<>biola.

1
Gordon Linoff 9 April 2021, 15:11

Cara paling sederhana dan paling efektif untuk melakukannya adalah dengan menggunakan numbers/tally table

Mensimulasikan tabel penghitungan di sini disebut digits - ini idealnya akan menjadi tabel permanen yang menyimpan angka dari 1 hingga bajillion, atau apa pun yang Anda butuhkan.

with digits as (
  select * from (values (1),(2),(3),(4),(5))v(n)
),
T as (
  select 'Bill' [Name] union all select 'James'
)
select t.[Name] 
from T
cross apply digits d
where d.n <= Len(T.[name])
0
Stu 9 April 2021, 15:37