Sıralama: Administration
Gruplar: Administrators
Katılan: 6.05.2014(UTC) Mesajlar: 670
19 Kere Teşekkür Etti. 152 Mesajına Toplam 253 Kere Teşekkür Edildi.
|
Originally Posted by: ask_skrn Merhabalar SQL de yeniyim. videolarınızı izliyorum. Çok teşekkürler eğitim videolarınız için, çok faydalı.
Elimde çalışan bir store procedure var. bir sorgumu içine gömmek istiyorum ama hata veriyor. Sorgu ayrı çalışıyor. procedurde ayrı olarak çalışıyor. sorguyu neresine ekliyeceğim konusunda yardım edebilirmisiniz.
şimdiden teşekkür ederim
eklemek istediğim sorgu 1. yada 2. farketmez : 1- ( select stl_talep_eden+' / '+cpt.cari_per_adi+' '+cpt.cari_per_soyadi as [TALEP EDEN Kişi] from dbo.SATINALMA_TALEPLERI x left join dbo.CARI_PERSONEL_TANIMLARI cpt on x.stl_talep_eden = cpt.cari_per_kod)
2- SELECT TOP 100 PERCENT stl_talep_eden AS [msg_S_0501] /* PERSONEL KODU */ , dbo.fn_CarininIsminiBul(1,stl_talep_eden) AS [msg_S_0502] /* PERSONEL ADI */ FROM dbo.SATINALMA_TALEPLERI WITH (NOLOCK)
yukardaki sorgunun bir tanesini aşağıdaki store procedure 'e eklemek istiyorum:
-
USE [MikroDB_V15_MEKANIK_TEST] GO /****** Object: StoredProcedure [dbo].[sp_SiparisOperasyonlari] Script Date: 11/02/2016 09:33:49 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[sp_SiparisOperasyonlari] @siptip tinyint = 0, @ilktar datetime = NULL, @sontar datetime = NULL, @acikkapali tinyint = 0, -- {0:Acik 1:Kapali 2:Hepsi } @tamamlanmis tinyint = 0, -- {0:tamamlanmamis 1:tamamlanmis 2:hepsi } @onayli tinyint = 0, -- {0:Onaysiz 1:Onayli 2:hepsi } @DepoTipi tinyint = 0, -- {0:Genel 1:Siparis Depo 2:VerilenDepo } @VerilenDepo integer = 0, @TarihTipi tinyint = 0, -- {0: Teslim tarihi 1 : Siparis tarihi } @Depolarstr nvarchar(MAX) = '', @BirimNo tinyint = 1, @carikodu nvarchar(25) = '', @amac tinyint = 0,-- 0 : Sevk_veya_kapama, 1: Onaylama_veya_kapama, 2 : Rezervasyon, 3: Kapanmis_tamamlanmammislardan_siparis_olusturma,4 : Siparis_izleme @durum tinyint = 0, -- 0:hepsi , 1 : acik siparislar , 2 : kapali siparisler @dagitim tinyint = 0, -- 0 : kapatarak , 1 : oranlayarak, 2 : dagitim yapma @yuvarlama tinyint = 1, -- 0:Yuvarlama yapma, 1:Yakına yuvarla, 2: Yukarı yuvarla, 3:Aşağı yuvarla @Sadece_rezervasyonlu_siparisler_fl bit = 0 AS BEGIN SELECT TOP 100 PERCENT [msg_S_0088] , -- KAYIT NO [msg_S_0003] /* CİNSİ */ , SHD.*, [msg_S_0084] /* BİRİMİ */ , [msg_S_0879] /* FİRMA UNVANI */ , [msg_S_0241] , -- TESLİM TARİHİ [#msg_S_0240] , -- SİPARİŞ TARİHİ [msg_S_0242] , -- SİP. CİNSİ [#msg_S_1731] , -- SİP.CİNS NO [msg_S_0243] , -- SERİ NO [msg_S_0157] , -- SIRA NO [#msg_S_0212] , -- SATIR NO [#msg_S_0093] , -- BELGE NO [msg_S_0200] , -- CARİ KODU [msg_S_0201] , -- CARİ İSMİ [#msg_S_0452] , -- TESLİM TÜRÜ [msg_S_0355], -- DURUMU [msg_S_0159] , -- DEPO [#msg_S_0244] , -- SİPARİŞ MİKTAR --dbo.fn_SiparisEslenenMiktar(0,sip_RECid_DBCno,sip_RECid_RECno) AS [#msg_S_0725] , -- EŞLEŞMİŞ MİKTAR -- Bu süreyi neredeyse 2-3 katına çıkarıyor. Başka çözüm bulana kadar kapatıyorum [#msg_S_0456] , -- TAMAMLANAN MİKTAR [#msg_S_0246] , -- VAZGEÇİLEN MİKTAR [msg_S_0463] , -- KALAN SİPARİŞ MİKTARI [msg_S_0463] * sto_birim1_agirlik AS [#msg_S_0467] , -- KALAN MİKTAR AĞIRLIK (KG) [msg_S_0463] * sto_birim1_en*sto_birim1_boy*sto_birim1_yukseklik/1000000000 [#msg_S_0468] , -- KALAN MİKTAR HACİM (M3) [msg_S_2826], /* REZERVE EDİLEN MİKTAR*/ case when (SO.[#KPT]=0) then [msg_S_0463] - [msg_S_2826] else 0.0 end AS [#msg_S_2885] , -- REZERVASYON SONRASI KALAN SİPARİŞ MİKTARI [#msg_S_0469] , -- STOK ELDEKİ MİKTAR [msg_S_0470],-- HAREKET MİKTARI [msg_S_0470]*sto_birim1_agirlik AS [#msg_S_2083] , -- HAREKET MİKTARI AĞIRLIK (KG) [msg_S_0470]*sto_birim1_en*sto_birim1_boy*sto_birim1_yukseklik/1000000000 AS [#msg_S_2084] , -- HAREKET MİKTARI HACİM (M3) [msg_S_0248] , -- BİRİM FİYAT [msg_S_0249] , -- SİPARİŞ BRÜT TUTAR [msg_S_1264], /* FİYAT LİSTE NO */ [msg_S_1265],/* FİYAT LİSTE AÇIKLAMASI */ [#msg_S_0250] , -- İSKONTO [#msg_S_0251] , -- MASRAF [msg_S_0252] , -- SİPARİŞ NET TUTAR [msg_S_0253] , -- KALAN SİPARİŞ NET TUTAR [msg_S_0254] , -- DÖVİZ [#msg_S_0255] , -- ADRES NO [#msg_S_0256] , -- ONAYLAYAN KULLANICI [#msg_S_0257] , -- İTHALAT-İHRACAT KODU [msg_S_0118] , -- SOR.MERK.KODU [#msg_S_0119] , -- SOR.MERK.İSMİ [msg_S_0116] , -- PROJE KODU [#msg_S_0161] , -- PARTİ [#msg_S_0162] , -- LOT [#msg_S_0117] , -- PROJE ADI [#msg_S_0260] , -- AÇIKLAMA 1 [#msg_S_0261] , -- AÇIKLAMA 2 [#msg_S_0471] , -- CARİ GRUP KODU (SELECT crg_isim FROM dbo.CARI_HESAP_GRUPLARI WITH (NOLOCK) Where crg_kod = [#msg_S_0471]) AS [#msg_S_0472], [#msg_S_0473] , -- BÖLGE KODU (SELECT bol_ismi FROM dbo.CARI_HESAP_BOLGELERI WITH (NOLOCK) Where bol_kod = [#msg_S_0473]) AS [#msg_S_0202],
(select stl_talep_eden+' / '+cpt.cari_per_adi+' '+cpt.cari_per_soyadi as [TALEP EDEN Kişi] from dbo.SATINALMA_TALEPLERI x left join dbo.CARI_PERSONEL_TANIMLARI cpt on x.stl_talep_eden = cpt.cari_per_kod)
[#msg_S_0474] , -- CARİ SEKTÖR KODU (SELECT sktr_ismi FROM dbo.STOK_SEKTORLERI WITH (NOLOCK) Where sktr_kod = [#msg_S_0474]) AS [#msg_S_0475], [#msg_S_0098] , -- VADE TARİH [#msg_S_0099] , -- VADE GÜN [msg_S_0262], -- DURUM */ [#msg_S_1697], -- DURUM NO*/ [#msg_S_1745] /* TESLİM TÜRÜ ADI */ , [#msg_S_1129] /* SORUMLU KODU */, [#msg_S_1130] /* SORUMLU KODU */ , [#msg_S_1042]/* ODEME PLAN ADI */, [msg_S_0551] /* ÖDEME PLANI NUMARASI */ , [#msg_S_2760] /* KAPAMA NEDENİ KODU */ , [#msg_S_2761] /* KAPAMA NEDENİ İSMİ */ , [#msg_S_2762] /* KAPAMA NEDENİ AÇIKLAMA */, [#msg_S_1735] /* İSKONTO YÜZDESİ 1 */ , [#msg_S_1736] /* İSKONTO YÜZDESİ 2 */ , [#msg_S_1737] /* İSKONTO YÜZDESİ 3 */ , [#msg_S_1738] /* İSKONTO YÜZDESİ 4 */ , [#msg_S_1739] /* İSKONTO YÜZDESİ 5 */ , [#msg_S_1740] /* İSKONTO YÜZDESİ 6 */ , [#msg_S_1741] /* MASRAF YÜZDESİ 1*/ , [#msg_S_1742] /* MASRAF YÜZDESİ 2*/ , [#msg_S_1743] /* MASRAF YÜZDESİ 3*/ , [#msg_S_1744] /* MASRAF YÜZDESİ 4*/ , [msg_S_1494] /* GEÇERLİLİK TARİHİ */ , [msg_S_4153] /* REZERVASYON MİKTARI */ , [msg_S_4154] /* REZERVASYONDAN TESLİM EDİLEN */ into #tmpSiparisOperasyonlari FROM ( select *, CASE WHEN ([#KPT]=0) and (@siptip=0) AND (( [msg_S_0463] )>0) and ([#msg_S_0469] > 0) THEN CASE WHEN ([#msg_S_0469]<=([msg_S_0463])) THEN [#msg_S_0469] ELSE [msg_S_0463] END WHEN ([#KPT]=0) and (@siptip=1) THEN [msg_S_0463] ELSE CAST(0.0 as FLOAT) END AS [msg_S_0470] -- HAREKET MİKTARI from dbo.fn_HamSiparisOperasyonlari ( @siptip, @ilktar, @sontar, @acikkapali, @tamamlanmis, @onayli, @DepoTipi, @VerilenDepo, @TarihTipi, @Depolarstr, @BirimNo, @carikodu, (case when @amac=2 then 1 else 0 end), @Sadece_rezervasyonlu_siparisler_fl) HSO WHERE ((@amac<>4) or ([#msg_S_1697]+1=@durum)or (@durum=0)) ) SO LEFT OUTER JOIN dbo.STOK_HIZMET_MASRAF_DEMIRBAS_DETAY_KOD_gizli SHD ON (SO.[msg_S_0001]=SHD.[msg_S_0078]) AND ([#msg_S_0158]=SHD.[#msg_S_0328]) LEFT OUTER JOIN dbo.STOKLAR ON (SO.[msg_S_0001]=dbo.STOKLAR.sto_kod) if @dagitim<>2 begin declare @stokkod nvarchar(25) declare @eldeki float declare @sipkalan float declare @kalan float declare @oran float declare @kayitno integer Declare Stok_Cursor CURSOR READ_ONLY FAST_FORWARD FOR SELECT [msg_S_0078], MIN (isnull([#msg_S_0469],0)), SUM(isnull([msg_S_0463],0)) FROM #tmpSiparisOperasyonlari GROUP BY [msg_S_0078] HAVING (MIN(isnull([#msg_S_0469],0))>0) and (MIN(isnull([#msg_S_0469],0))<SUM(isnull([msg_S_0463],0))) --aksi halde dagitima gerek yok gelen rakamlar dogrudur. OPEN Stok_Cursor FETCH NEXT FROM Stok_Cursor INTO @stokkod,@eldeki,@sipkalan WHILE @@FETCH_STATUS = 0 BEGIN UPDATE #tmpSiparisOperasyonlari SET msg_S_0470 = 0 where [msg_S_0078] = @stokkod if @sipkalan>0 set @oran=@eldeki/ @sipkalan else set @oran=0 Declare Stok_Cursor2 CURSOR READ_ONLY FAST_FORWARD FOR Select msg_S_0088,[msg_S_0463] FROM #tmpSiparisOperasyonlari WHERE [msg_S_0078]=@stokkod OPEN Stok_Cursor2 FETCH NEXT FROM Stok_Cursor2 INTO @kayitno,@kalan declare @dagitimmiktari float WHILE @@FETCH_STATUS = 0 and (@eldeki>0) BEGIN set @dagitimmiktari=0 if (@kalan>0) begin if @dagitim=0 --kapatarak begin if @eldeki>@kalan begin set @dagitimmiktari=@kalan set @eldeki=@eldeki-@kalan end else begin set @dagitimmiktari=@eldeki set @eldeki=0 end end else --oranlayarak begin set @dagitimmiktari=@kalan*@oran set @dagitimmiktari=case when @yuvarlama=1 then round(@dagitimmiktari,0) when @yuvarlama=2 then round(@dagitimmiktari+(0.5),0) when @yuvarlama=3 then round(@dagitimmiktari-(0.5),0) else @dagitimmiktari end end end UPDATE #tmpSiparisOperasyonlari SET msg_S_0470 =@dagitimmiktari WHERE msg_S_0088=@kayitno FETCH NEXT FROM Stok_Cursor2 INTO @kayitno,@kalan END CLOSE Stok_Cursor2 DEALLOCATE Stok_Cursor2 FETCH NEXT FROM Stok_Cursor INTO @stokkod,@eldeki,@sipkalan END CLOSE Stok_Cursor DEALLOCATE Stok_Cursor end select * from #tmpSiparisOperasyonlari ORDER BY [msg_S_0241], [msg_S_0200], [msg_S_0243], [msg_S_0157], [#msg_S_0212] END
Merhabalar Bir procedure un içine en fazla 1 tane sonuç döndüren select yazabilirsiniz, Başka bir çözüm bulmanız gerekiyor, Size tavsiye olarak bu sorguyu ana sorguya join olarak yazmanız oradan istediğiniz kolonları seçin , tabi iki sorgu arasında bir ilişki olması gerekiyor |