如何在SQL Server中多次检索行?

uza*_*y95 2 sql t-sql sql-server

这些是我最初检索到的行:

112   Cem   Ceminay
210   Ali   Salih
132   Gül   Sen
Run Code Online (Sandbox Code Playgroud)

现在我想将每一行复制为3行.所以新的结果:

112   Cem   Ceminay
112   Cem   Ceminay
112   Cem   Ceminay
210   Ali   Salih
210   Ali   Salih
210   Ali   Salih
132   Gül   Sen
132   Gül   Sen
132   Gül   Sen
Run Code Online (Sandbox Code Playgroud)

什么样的选择声明可以帮助我?

示例select语句:

SELECT id,name,surname FROM people;
Run Code Online (Sandbox Code Playgroud)

谢谢可爱的人......

PS:我的查询:

            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
Run Code Online (Sandbox Code Playgroud)

gbn*_*gbn 13

为了帮助解释:笛卡尔积/交叉连接背景

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

在其他地方评论了7个表和42行

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;
Run Code Online (Sandbox Code Playgroud)

  • 我不是一个SQL初学者,我花了一秒钟才弄明白为什么这个有用.我认为一个初学者会遇到一些麻烦......虽然如果有一个评论和声明解释它做了什么,它会没问题,并且是一个非常光滑的方法来实现它. (2认同)
  • 如果他解释了查询的作用,我认为会更多地投票.为此:它使用一个带有3行的表值子查询,名为bar.然后它进行交叉连接,它与内部连接相同,以1 = 1作为标准.它生成所谓的笛卡尔积,但是第二个表中每行的第一个表只有一行.由于第二个表中有3行,bar,它会从第一个表中生成3行副本.要调整副本数量,只需调整第二个表格中的行数吧. (2认同)

mar*_*c_s 7

怎么样:

SELECT id,name,surname FROM people
UNION ALL
SELECT id,name,surname FROM people
UNION ALL
SELECT id,name,surname FROM people
Run Code Online (Sandbox Code Playgroud)

并可能添加一个

ORDER BY id, name
Run Code Online (Sandbox Code Playgroud)

如果你想要它订购它.