Forum

sql sorgu 1 aydır y...
 
Bildirimler
Hepsini Temizle

sql sorgu 1 aydır yapamadım

7 Yazılar
3 Üyeler
0 Reactions
613 Görüntüleme
(@osmankilic)
Gönderiler: 27
Eminent Member
Konu başlatıcı
 

herkese kolay gelsin konu başlıgını nasıl anlatacagımı bile bulamadım kusuruma bakmayın .


okadar karışık bir şey istiyecegim ki ben bile nasıl anlatacagımı bulamadım daha 🙂 


bir tablom var isimleri örnekdir italyanca oldugundan böyle yazıyorum


 tablo1


alanlar


alan1 alan2


alan1           alan2


1060          1061


1061          1069


1069          1075


 


açıklaması alan1 eski numara alan2 yeni numara alan1 de esi numara yı aratıyorum arattıgımda alan2 yi ekrana yazdırıyorum 1060 numaası 1061 olmuş ama 1061 de değişim görmüş 1069 1069 da 1075 olmuş bu şekilde yürümesi lazım alan2 deki degeri aldı alan1 de aynısı yoksa duracak varsa devam edip duracak karışık biraz


 bu

 
Gönderildi : 30/12/2011 18:49

(@selahattinsadoglu)
Gönderiler: 826
Prominent Member
 

Merhaba,

Sorununuzu daha açık bir şekilde dile getirebilir misiniz?Çünkü,yazdıklarınızdan bir anlam çıkarmak gerçekten çok zor.Örneğin bize tablo yapısının barsa resmini ve ya daha açık şekilde içindeki bilgilerden örnek bir görüntüyü ve de ek olarak SQL sorgu sonucundan nasıl bir sonuç istiyorsanız onunda bir örnek tablo gösterim şeklini atmayı unutmayınız.

 

Saygılarımla,

 
Gönderildi : 30/12/2011 19:01

(@osmankilic)
Gönderiler: 27
Eminent Member
Konu başlatıcı
 

resim 


resim de kırmızı alan alan1 eski no diger alan alan2 yeni no


örnek where alan1=1060 aradık


 alan2 de deger varsa  alan1=alan2


tekrar alan2 de deger varsa alan1=alan2 yoksa döngü duracak


dedigim gibi çok karışık anlatmakta bile zorlanıyorum derdimi :=)


şimdiden tşkler..


 


not : alan3 diye bir alan daha var onu yazmayı unutmuşum resimdede görünüyor .


alan3 içeriği S ide değişmiş * ise bu son numara demek


yani şöyle anlatayım


where alan1=1060 iff veya case when veya başka bilyolla alan3=s ise alan1=alan2 * ise döngü bitecek veya sonlanacak 


 

 
Gönderildi : 30/12/2011 19:48

Hakan Uzuner
(@hakanuzuner)
Gönderiler: 33367
Illustrious Member Yönetici
 

Turgay hocam bana gönderdi bende paylaşıyorum

create table #temp(alan1 int, alan2 int, skipx varchar(1), lastnumber varchar(1), oto int identity(1,1))

insert into #temp values (1060,1061,'','')
insert into #temp values (1000,1001,'','')
insert into #temp values (1061,1068,'','')
insert into #temp values (1001,1080,'','')
insert into #temp values (1002,1015,'','')
insert into #temp values (1015,1025,'','')
insert into #temp values (1080,1180,'','')
insert into #temp values (1068,1072,'','')

declare @i int, @max int, @TF bit
declare @alan1 int, @alan2 int, @skipx varchar(1)
set @TF=0
select @i=min(oto),@max=MAX(oto) from #temp

while @i<=@max begin   
      select @alan1=alan1,@alan2=alan2,@skipx=skipx from #temp where oto=@i 
      if @skipx<>'*' begin
            set @TF=0  
            while @TF=0 begin
                  if exists(select * from #temp where alan1=@alan2)
                        select @alan1=alan1,@alan2=alan2 from #temp where alan1=@alan2
                  else begin
                        update #temp set lastnumber='*' where alan1=@alan1
                        set @TF=1
                  end
            end  
      end
      set @i=@i+1
end

select alan2 from #temp where lastnumber='*'
 

Danışman - ITSTACK Bilgi Sistemleri
****************************************************************
Probleminiz Çözüldüğünde Sonucu Burada Paylaşırsanız.
Sizde Aynı Problemi Yaşayanlar İçin Yardım Etmiş Olursunuz.
Eğer sorununuz çözüldü ise lütfen "çözüldü" olarak işaretlerseniz diğer üyeler için çok büyük kolaylık sağlayacaktır.
*****************************************************************

 
Gönderildi : 02/01/2012 17:58

(@osmankilic)
Gönderiler: 27
Eminent Member
Konu başlatıcı
 

hocam öncelikle çok teşekkürler.
sql tecrubem pek yok böyle bir sorgu beklemiyordum bile :=)
2 şeye kafam takıldı  ben örnek 1060 ı aramak istedigimde nereye yazacagım. birde bu sorgu bir tek son numarayı veriyor tablodaki resim deki gibi verilebilirmi şimdiden teşekkürler....


 


özür dilerim düzeltme ...


1015 1025  * 6
1080 1180  * 7
1068 1072  * 8
 bu şekilde çıktı veriyor  tabloda


1060 1061


1061 1068


1068 1072 gibi gösterme şansı varmıdır yani her değiştiği numarayıda görmem gerekiyor tabloda mümkünmü hocam ?


yardımcı olablirseniz sevinirim. kolay gelsin şimdiden tekrar teşekkürler..

 
Gönderildi : 02/01/2012 19:16

Hakan Uzuner
(@hakanuzuner)
Gönderiler: 33367
Illustrious Member Yönetici
 

ben bunu çok doğru bulmuyorum, siz bir konuyu biliyor olmalısınız, takıldığınız yerde yardım istemelisiniz. Eğer biz bu şekilde yardıma devam edersek bu postu örnek alarak herkes script yazmamızı ister ki bu işin sonu yok. Eğitim almanızı tavsiye ederim.

Danışman - ITSTACK Bilgi Sistemleri
****************************************************************
Probleminiz Çözüldüğünde Sonucu Burada Paylaşırsanız.
Sizde Aynı Problemi Yaşayanlar İçin Yardım Etmiş Olursunuz.
Eğer sorununuz çözüldü ise lütfen "çözüldü" olarak işaretlerseniz diğer üyeler için çok büyük kolaylık sağlayacaktır.
*****************************************************************

 
Gönderildi : 02/01/2012 19:41

(@osmankilic)
Gönderiler: 27
Eminent Member
Konu başlatıcı
 

hocam beni anlamadı yada ben anlatamadım.


bu aşagıdaki kodlarla ben bir liste alıyorum bu liste bana parça numaraları veriyor fakat bizim işte parça no ları sürekli değişmekte bu sebeple bu alana birde bu parçaya muadilli var veya bu parca noları da olur demem lazımm bunun için de dedigim bahsettiğim kod bana çaok lazım onu yapamadım dedim hocamın bana yolladıgı kodları bu yara entegre edemedim. aşagıda ki


assoc_tavole_parts.PART_NUMBER alanından gelen bütün numaraları


esauriti_sostituiti.PN_SOSTITUITO bu alanda arayacak yoksa burda aynısı ekrana  assoc_tavole_parts.PART_NUMBER gelecek


varsa aynısı esauriti_sostituiti.TP_SOST_SOSTITUENTE alanına bakacak s ise


esauriti_sostituiti.PN_SOSTITUENTE bu alandaki numarayı esauriti_sostituiti.PN_SOSTITUITO içinde tekrar arayacak varsa tekrar lıyacak ve listemi verecek


esauriti_sostituiti.TP_SOST_SOSTITUENTE * ise durduracak işlemi


umarım bu sefer anlatabilmişimdir. şimdiden teşekkürler.


 


CASE WHEN assoc_tavole_parts.FL_ESA_SOS ='1'
AND esauriti_sostituiti.PN_SOSTITUITO = assoc_tavole_parts.PART_NUMBER
OR esauriti_sostituiti.TP_SOST_SOSTITUENTE ='S' or esauriti_sostituiti.PN_SOSTITUITO = esauriti_sostituiti.PN_SOSTITUENTE
AND esauriti_sostituiti.PN_SOSTITUENTE = esauriti_sostituiti.PN_SOSTITUITO
THEN esauriti_sostituiti.PN_SOSTITUENTE
ELSE assoc_tavole_parts.PART_NUMBER END AS YENIVEESKINO , bu şekilde bir şey denedim olmadı sadece bir kere değişmiş noları gösteriyor ben bütün değişmş nolarını istiyorum


1060 1061 oldu 1061 1068 oldu 1068 1075 oldu   gibi


 


SELECT
assoc_tavole_parts.NR_ITEM,
assoc_tavole_parts.PN_QTA,
assoc_tavole_parts.PART_NUMBER,
CASE WHEN hafif.FIYATI >= 0 THEN hafif.FIYATI ELSE '-' END AS FIYATI,
CASE WHEN hafif.TANIM >= 0 THEN hafif.TANIM ELSE '-' END AS TANIM
FROM  an_telai
INNER JOIN vp ON vp.PV_CODE = an_telai.PV_CODE
INNER JOIN scheda_tecnica_vcb ON scheda_tecnica_vcb.CBV_CODE = vp.CBV_CODE
INNER JOIN vp_opt_pacc ON vp_opt_pacc.CBV_CODE = scheda_tecnica_vcb.CBV_CODE AND vp_opt_pacc.OPT_TIPO <> '*'
INNER JOIN vcb_tavole_pacc ON vcb_tavole_pacc.CBV_CODE = vp_opt_pacc.CBV_CODE AND vcb_tavole_pacc.OPT_TIPO <> '*'
INNER JOIN an_tavole ON an_tavole.TONUMBER = vcb_tavole_pacc.TONUMBER
INNER JOIN tonumber ON tonumber.TONUMBER = an_tavole.TONUMBER
LEFT JOIN assoc_tavole_parts ON assoc_tavole_parts.COD_TAVOLA_GRAFICA = an_tavole.COD_TAVOLA_GRAFICA
LEFT JOIN esauriti_sostituiti ON esauriti_sostituiti.PN_SOSTITUITO = assoc_tavole_parts.PART_NUMBER
LEFT JOIN hafif on hafif.PARCA_NO = LTRIM(assoc_tavole_parts.PART_NUMBER)
WHERE an_telai.TELAIO = 'zcfc3572005481899'
AND vp_opt_pacc.PV_CODE = vp.PV_CODE
AND vcb_tavole_pacc.CBV_CODE = vp_opt_pacc.CBV_CODE
AND vcb_tavole_pacc.CODICE_OPT = vp_opt_pacc.CODICE_OPT
AND scheda_tecnica_vcb.FL_PRP = an_tavole.FL_TAVOLA_MADRE
and an_tavole.COD_TAVOLA_GRAFICA = vcb_tavole_pacc.COD_TAVOLA_GRAFICA
AND tonumber.CLASSE = '50'
AND tonumber.GRUPPO = '01'
AND tonumber.SUBGRP = '08'
AND assoc_tavole_parts.COD_TAVOLA_GRAFICA = '452'
ORDER BY assoc_tavole_parts.NR_ITEM ASC

 
Gönderildi : 05/01/2012 18:58

Paylaş: