Delphi Can

Orjinalini görmek için tıklayınız: Tek sorguda iki sonuç (Çözüldü)
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sql management  de sorgu çalışıyor
select *, CASE WHEN S_GrupToplam = ' ' THEN S_SIPARIS_NO ELSE S_GrupToplam END As Gecici_sip_no
         from Siparis   
         WHERE S_GITTI<>1 AND S_BAYI_ADI='AYSAN' AND S_IMALAT_NO>=1 AND S_IMALAT_NO<=999999 AND 
          S_SIPARIS_NO>=1 AND S_SIPARIS_NO<=999999 AND CONVERT(date,S_SIP_TRH,104) >= CONVERT(date,'01.01.2024',104) AND 
          CONVERT(date,S_SIP_TRH,104) <= CONVERT(date,'04.03.2024',104) order by CONVERT(date,S_SIP_TRH,104) ASC

Bu sorguda çalışıyor.

select    sum(S_TOPLAMSAG) as sag_toplam,
 sum(S_TOPLAMSOL) as sol_toplam 
 from Siparis   
 WHERE S_GITTI<>1 AND S_BAYI_ADI='AYSAN' AND S_IMALAT_NO>=1 AND S_IMALAT_NO<=999999 AND 
       S_SIPARIS_NO>=1 AND S_SIPARIS_NO<=999999 AND CONVERT(date,S_SIP_TRH,104) >= CONVERT(date,'01.01.2024',104) AND 
CONVERT(date,S_SIP_TRH,104) <= CONVERT(date,'04.03.2024',104)

iki sorguyu nasıl birleştirebilirim.
(04-03-2024, Saat: 11:24)cinarbil Adlı Kullanıcıdan Alıntı: [ -> ]Sql management  de sorgu çalışıyor
select *, CASE WHEN S_GrupToplam = ' ' THEN S_SIPARIS_NO ELSE S_GrupToplam END As Gecici_sip_no
          from Siparis   
         WHERE S_GITTI<>1 AND S_BAYI_ADI='AYSAN' AND S_IMALAT_NO>=1 AND S_IMALAT_NO<=999999 AND 
          S_SIPARIS_NO>=1 AND S_SIPARIS_NO<=999999 AND CONVERT(date,S_SIP_TRH,104) >= CONVERT(date,'01.01.2024',104) AND 
          CONVERT(date,S_SIP_TRH,104) <= CONVERT(date,'04.03.2024',104) order by CONVERT(date,S_SIP_TRH,104) ASC

Bu sorguda çalışıyor.

select    sum(S_TOPLAMSAG) as sag_toplam,
  sum(S_TOPLAMSOL) as sol_toplam 
 from Siparis   
 WHERE S_GITTI<>1 AND S_BAYI_ADI='AYSAN' AND S_IMALAT_NO>=1 AND S_IMALAT_NO<=999999 AND 
       S_SIPARIS_NO>=1 AND S_SIPARIS_NO<=999999 AND CONVERT(date,S_SIP_TRH,104) >= CONVERT(date,'01.01.2024',104) AND 
CONVERT(date,S_SIP_TRH,104) <= CONVERT(date,'04.03.2024',104)

iki sorguyu nasıl birleştirebilirim.


UNION ALL kullanabilirsiniz. Ama UNION ALL kullanabilmeniz için her iki sorgunun sütun sayısının aynı olması gerekiyor. Birinde olup diğerinde olmayan sütunlar için NULL AS SUTUN_ADI şeklinde bir ifadeyle olamayan sütunları tamamlayabilirsiniz.


select *, CASE WHEN S_GrupToplam = ' ' THEN S_SIPARIS_NO ELSE S_GrupToplam END As Gecici_sip_no
        from Siparis  
        WHERE S_GITTI<>1 AND S_BAYI_ADI='AYSAN' AND S_IMALAT_NO>=1 AND S_IMALAT_NO<=999999 AND
         S_SIPARIS_NO>=1 AND S_SIPARIS_NO<=999999 AND CONVERT(date,S_SIP_TRH,104) >= CONVERT(date,'01.01.2024',104) AND
         CONVERT(date,S_SIP_TRH,104) <= CONVERT(date,'04.03.2024',104) order by CONVERT(date,S_SIP_TRH,104) ASC

UNION ALL


select    sum(S_TOPLAMSAG) as sag_toplam,
 sum(S_TOPLAMSOL) as sol_toplam
 from Siparis  
 WHERE S_GITTI<>1 AND S_BAYI_ADI='AYSAN' AND S_IMALAT_NO>=1 AND S_IMALAT_NO<=999999 AND
       S_SIPARIS_NO>=1 AND S_SIPARIS_NO<=999999 AND CONVERT(date,S_SIP_TRH,104) >= CONVERT(date,'01.01.2024',104) AND
CONVERT(date,S_SIP_TRH,104) <= CONVERT(date,'04.03.2024',104)

(04-03-2024, Saat: 11:31)csunguray Adlı Kullanıcıdan Alıntı: [ -> ]
(04-03-2024, Saat: 11:24)cinarbil Adlı Kullanıcıdan Alıntı: [ -> ]Sql management  de sorgu çalışıyor
select *, CASE WHEN S_GrupToplam = ' ' THEN S_SIPARIS_NO ELSE S_GrupToplam END As Gecici_sip_no
          from Siparis   
         WHERE S_GITTI<>1 AND S_BAYI_ADI='AYSAN' AND S_IMALAT_NO>=1 AND S_IMALAT_NO<=999999 AND 
          S_SIPARIS_NO>=1 AND S_SIPARIS_NO<=999999 AND CONVERT(date,S_SIP_TRH,104) >= CONVERT(date,'01.01.2024',104) AND 
          CONVERT(date,S_SIP_TRH,104) <= CONVERT(date,'04.03.2024',104) order by CONVERT(date,S_SIP_TRH,104) ASC

Bu sorguda çalışıyor.

select    sum(S_TOPLAMSAG) as sag_toplam,
  sum(S_TOPLAMSOL) as sol_toplam 
 from Siparis   
 WHERE S_GITTI<>1 AND S_BAYI_ADI='AYSAN' AND S_IMALAT_NO>=1 AND S_IMALAT_NO<=999999 AND 
       S_SIPARIS_NO>=1 AND S_SIPARIS_NO<=999999 AND CONVERT(date,S_SIP_TRH,104) >= CONVERT(date,'01.01.2024',104) AND 
CONVERT(date,S_SIP_TRH,104) <= CONVERT(date,'04.03.2024',104)

iki sorguyu nasıl birleştirebilirim.


UNION ALL kullanabilirsiniz. Ama UNION ALL kullanabilmeniz için her iki sorgunun sütun sayısının aynı olması gerekiyor. Birinde olup diğerinde olmayan sütunlar için NULL AS SUTUN_ADI şeklinde bir ifadeyle olamayan sütunları tamamlayabilirsiniz.


select *, CASE WHEN S_GrupToplam = ' ' THEN S_SIPARIS_NO ELSE S_GrupToplam END As Gecici_sip_no
        from Siparis  
        WHERE S_GITTI<>1 AND S_BAYI_ADI='AYSAN' AND S_IMALAT_NO>=1 AND S_IMALAT_NO<=999999 AND
         S_SIPARIS_NO>=1 AND S_SIPARIS_NO<=999999 AND CONVERT(date,S_SIP_TRH,104) >= CONVERT(date,'01.01.2024',104) AND
         CONVERT(date,S_SIP_TRH,104) <= CONVERT(date,'04.03.2024',104) order by CONVERT(date,S_SIP_TRH,104) ASC

UNION ALL


select    sum(S_TOPLAMSAG) as sag_toplam,
 sum(S_TOPLAMSOL) as sol_toplam
 from Siparis  
 WHERE S_GITTI<>1 AND S_BAYI_ADI='AYSAN' AND S_IMALAT_NO>=1 AND S_IMALAT_NO<=999999 AND
       S_SIPARIS_NO>=1 AND S_SIPARIS_NO<=999999 AND CONVERT(date,S_SIP_TRH,104) >= CONVERT(date,'01.01.2024',104) AND
CONVERT(date,S_SIP_TRH,104) <= CONVERT(date,'04.03.2024',104)


şu şekilde denedim sizin önerinizide  deneyeceğim

select *, CASE WHEN S_GrupToplam = ' ' THEN S_SIPARIS_NO ELSE S_GrupToplam END As Gecici_sip_no  
         
 from Siparis   


left join (
select sum(S_TOPLAMSAG) as sag_toplam,sum(S_TOPLAMSOL) as sol_toplam
        
 from Siparis   

 WHERE S_GITTI<>1 AND S_BAYI_ADI='AYSAN' AND S_IMALAT_NO>=1 AND S_IMALAT_NO<=999999 AND 
       S_SIPARIS_NO>=1 AND S_SIPARIS_NO<=999999 AND CONVERT(date,S_SIP_TRH,104) >= CONVERT(date,'01.01.2024',104) AND 
CONVERT(date,S_SIP_TRH,104) <= CONVERT(date,'04.03.2024',104) 
         ) toplam on 1=1


 WHERE S_GITTI<>1 AND S_BAYI_ADI='AYSAN' AND S_IMALAT_NO>=1 AND S_IMALAT_NO<=999999 AND 
       S_SIPARIS_NO>=1 AND S_SIPARIS_NO<=999999 AND CONVERT(date,S_SIP_TRH,104) >= CONVERT(date,'01.01.2024',104) AND 
CONVERT(date,S_SIP_TRH,104) <= CONVERT(date,'04.03.2024',104) order by CONVERT(date,S_SIP_TRH,104) ASC
@cinarbil Eğer tek sorgu içinde almak zorunda değilsen aynı SP içinden dönen 2 farklı tabloyu Delphi tarafında Farklı TADODataSet ile ayrı ayrı kullanabilirsin
Umarım yapmak istediğini yanlış anlamamışımdır
(05-03-2024, Saat: 08:21)adelphiforumz Adlı Kullanıcıdan Alıntı: [ -> ]@cinarbil Eğer tek sorgu içinde almak zorunda değilsen aynı SP içinden dönen 2 farklı tabloyu Delphi tarafında Farklı TADODataSet ile ayrı ayrı kullanabilirsin
Umarım yapmak istediğini yanlış anlamamışımdır

Doğru anlaşılmış 
Çok büyük datalarda benim yazdığın kod yavaş çalışıyor.
Sizin öneriniz gibi önce filitre değerlerini bir değişkene atadım sonra
ilk sorguyu çalıştırdım işlem tamamlanınca toplamlar sorgusunu çalıştırıp sonuçları aldım.
daha performanslı çalıştı.

örneğini paylaştığım kod yavaş ama ihtiyacı olan için (sonuçları dbgride atayan) toplamlar gridde geliyor.

ikinci sorgu ile olunca işlem hızlı ama sonuçları dbgride değil bağımsız bir değişkene veya edit e atıyorsunuz.