2009-07-30 7 views
2

Это мои строки, которые я первоначально извлекаемые:Как получить несколько строк в SQL Server?

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 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 
+9

Почему во имя Бога вы хотели бы это сделать? – JohnFx

+2

@JohnFx: это был не вопрос! :-) –

+0

@marc_s: по крайней мере, он сказал это в комментарии вместо ответа. @JohnFx: наверняка у вас был опыт работы с вопросом, и все думают, что вы пытаетесь сделать, это затормозить. На мой взгляд, это не очень вежливо. Просто ответьте на вопрос, поскольку он опубликован. – MusiGenesis

ответ

13

Чтобы объяснить: 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; 
+0

+1 для того, чтобы не дублировать запрос –

+1

Интересный подход - он не может дублировать запрос, но, с моей точки зрения, это не так просто и совершенно очевидно. –

+0

@marc: Я не согласен ... кажется довольно очевидным для меня. –

7

Как насчет:

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

и, возможно, добавьте

ORDER BY id, name 

ему, если хотите, приказал.

Марк

+0

Именно то, что я собирался сказать. +1 –

+0

Я хочу умножить результат :) Не существует, так или иначе, может быстро умножать результаты. Поскольку мой оператор sql 42 строки и содержит 7 таблиц – uzay95

+0

@uzay: можете ли вы использовать ответ gbn? это может работать лучше в вашем сценарии. –