Skip to content Skip to sidebar Skip to footer

How To Retrieve Rows Multiple Times In SQL Server?

These are my rows that I initially retrieved: 112 Cem Ceminay 210 Ali Salih 132 Gül Sen Now I want to clone every row to be duplicated as 3 rows. So the new results:

Solution 1:

To help explain: Cartesian product/cross join background

SELECT
    people.id, people.name, people.surname
FROM
    people
    CROSS JOIN
    (SELECT 1 AS foo UNION ALL SELECT 2 UNION ALL SELECT 3) bar;

After comment elsewhere about 7 tables and 42 lines

SELECT
    Singles.*
FROM
    (
    SELECT 
    Faturalar.faturaNo
    ,Klinikler.SAPSirketKodu [COMPANY CODE]
    ,Klinikler.SAPBussinessArea [BUSINESS AREA]
    ,BasilmisFaturalar.basilmisFatura_id [REFERENCE]
    ,BasilmisFaturalar.duzenlemeTarihi [DOCUMENT DATE]
    ,BasilmisFaturalar.duzenlemeTarihi [BASELINE DATE]
    ,Kurumlar.sapKodu [ACCOUNT]
    ,Kurumlar.kurumAdi + ' adına '+Faturalar.faturaNo+' nolu fatura' [TEXT]
    ,BasilmisFaturalar.kdvDahilToplamTutar [AMOUNT]
    ,BasilmisFaturalar.kdvHaricToplamTutar
    ,(BasilmisFaturalar.kdvDahilToplamTutar-BasilmisFaturalar.kdvHaricToplamTutar) AS kdvTutari
    ,CASE 
    WHEN BasilmisFaturalar.kdvOrani = 0 THEN 'A0'
    WHEN BasilmisFaturalar.kdvOrani = 8 THEN '2H'
    WHEN BasilmisFaturalar.kdvOrani = 18 THEN '3H'
    END [TAX CODE]
    ,Klinikler.profitCenter [COST CENTER/PROFIT CENTER]
    FROM Faturalar 
    -- Fatura yazdırılmış olmalı
    INNER JOIN BasilmisFaturalar ON BasilmisFaturalar.basilmisFatura_id = Faturalar.refBasilmisFatura_id
    -- Yazdırılmış fatura iptal edilmemiş olmalı
    INNER JOIN BasiliFaturaIptalTalepleri ON BasiliFaturaIptalTalepleri.refBasilmisFatura_id <> BasilmisFaturalar.basilmisFatura_id
    -- Fatura Kurum Detaylarından KURUM bilgilerine
    INNER JOIN KurumFaturaDetaylari ON KurumFaturaDetaylari.kurumFaturaDetay_id = BasilmisFaturalar.refKurumFaturaDetay_id
    -- Faturanın kesildiği kurum
    INNER JOIN Kurumlar ON Kurumlar.kurum_id = dbo.KurumFaturaDetaylari.refKurum_id
    -- Seanslar üzerinden Klinik bilgilerine böylece SAPcc, SAPba, ProfitCenter a ulaşıyoruz
    INNER JOIN Seanslar ON Seanslar.refFatura_id = Faturalar.fatura_id

    INNER JOIN dbo.Klinikler ON dbo.Klinikler.klinik_id = Seanslar.refKlinik_id
    -- Belirli bir düzenleme tarihi aralığında olmalı
    WHERE BasilmisFaturalar.duzenlemeTarihi BETWEEN DATEADD(m,-1,GETDATE()) AND GETDATE() 
    GROUP BY Faturalar.faturaNo,BasilmisFaturalar.basilmisFatura_id,kdvDahilToplamTutar
    ,kdvHaricToplamTutar
    ,BasilmisFaturalar.kdvOrani
    ,BasilmisFaturalar.duzenlemeTarihi
    ,Kurumlar.sapKodu
    ,Klinikler.SAPBussinessArea
    ,Klinikler.SAPSirketKodu
    ,Klinikler.profitCenter
    ,Kurumlar.kurumAdi
    ) Singles
    CROSS JOIN
    (SELECT 1 AS foo UNION ALL SELECT 2 UNION ALL SELECT 3) Multiplier;

Solution 2:

How about:

SELECT id,name,surname FROM people
UNION ALL
SELECT id,name,surname FROM people
UNION ALL
SELECT id,name,surname FROM people

and possibly add a

ORDER BY id, name

to it if you want it ordered.

Marc


Post a Comment for "How To Retrieve Rows Multiple Times In SQL Server?"