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

标签 sql sql-server tsql

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

112   Cem   Ceminay
210   Ali   Salih
132   Gül   Sen

现在我想克隆每一行以复制为 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

什么样的 select 语句可以帮助我?

示例选择语句:

SELECT id,name,surname FROM people;

谢谢可爱的人们...

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

最佳答案

帮忙解释一下:Cartesian product/cross join背景

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

在别处评论了 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;

关于sql - 如何在 SQL Server 中多次检索行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1209395/

相关文章:

mysql - 我可以使用 SQL 注入(inject)来更改服务器数据库吗?

sql - 使用 group by 和 sum 查询表

在 SQL Server 中使用 With Union 的 SQL 构建路径

sql - 为什么在存储过程定义中将 SQL Server 位设置为 "false"有效?

mysql - PDO,如何获取子集行而不是所有行

sql - SQL Azure 是关系数据库吗?

c# - 内联参数化查询超时

sql - SQL Server 分区计数中的计数

json - SQL Server : How to query data all rows as Json object into next to other columns?

sql - 将行透视到返回值超过 1 个的列