none
SQL de oran almak. RRS feed

  • Soru

  • merhaba arkadaşlar. sql den fazla anlamıyorum. araştırabildiğim kadarıyla yapmaya çalışıyorum.

    şu şekilde sorgu yazarak xml dosyasından çektiğim verileri veritabanına aktarıyorum.

    INSERT INTO XMLwidthOpenXML (XMLData, LoadedTime)
    SELECT CONVERT (XML, BulkColumn) AS BulkColumn, GETDATE()
    FROM OPENROWSET(BULK 'C:\Users\...\Desktop\veri\Rapor6.xml', SINGLE_BLOB) AS x;
    
    SELECT * FROM XMLwidthOpenXML
    
    
    
    DECLARE @XML AS XML,@Doc AS INT,@SQL NVARCHAR(MAX);
    
    SELECT @XML = XMLData FROM XMLwidthOpenXML
    
    EXEC sp_xml_preparedocument @doc OUTPUT, @XML;
    
    
    INSERT INTO tbl_elektrik(DEGER1,SAYACNO,SAYAC_TUR_DEGERI)
    
    SELECT * FROM OPENXML(@doc, 'REPORT_EXPORT/REGISTERS/REGISTER/REGISTER_DATA')
             WITH (
    		
    		DEGER1 decimal(18,4) 'VALUE[1]',
    		SAYACNO NVARCHAR(255),
    		SAYAC_TUR_DEGERI NVARCHAR(50));
    		
    		UPDATE tbl_elektrik
    		SET SAYACNO = SUBSTRING(SAYAC_ADI,8,8) , SAYAC_TUR_DEGERI = SUBSTRING(SAYAC_ADI,17,6)
    		EXEC sp_xml_removedocument @doc;
    
    	

    sorgu sonucu aşağıdaki gibi tablom oluşuyor.

    Aynı SAYACNO'ya ait SAYAC_TUR_DEGERI sütununda 3 farklı değer tipi var (A+RİT0, A-RcT0,A+AT0). DEGER1 sütunundaki verilerde bu bunlara ait.Yapmak istediğim iki yeni sütun ekleyerek belirttiğim şekilde oranlamak. DEGER1 sütunu NULL ve 0 değeride alabiliyor. bunları da hesaba katarak ve Ayrıca boş kalan 2 satıra nasıl bir çözüm bulabilirim.  Örnek vermek gerekirse

    ORAN1             ORAN2

    276/4948        304/4948








    • Düzenleyen cennetbolu 17 Eylül 2019 Salı 08:56
    17 Eylül 2019 Salı 08:26

Tüm Yanıtlar

  • Neden buraya ornek gönderirken, yazi olan bir seyi, insan yazi olarak degil de resim olarak gönderir ki? - Daha mi kolay göndermesi :(

    Neyse, test edip denemeden, kafadan yazıyorum ben de (deger1 NULL veya 0 ise ne yapilacagini hiç soylememissiniz, o durumda dogrudan NULL olacagini dusunuyorum - zaten tablo oldugunu bildigimiz seylerin basına tbl gibi ekleri hiç haz etmediğimden ben dogrudan "elektrik" diye yazıyorum):

    select deger1, SayacNo, Sayac_Tur_Degeri,
       case 
       cast(when Sayac_Tur_Degeri = 'A+RiT0' then
            case 
            when coalesce(t2.aat,0) = 0 then NULL
            else t1.arc/t2.aat    
            end 
       end as decimal(15,4)) as Oran1,
       cast(when Sayac_Tur_Degeri = 'A+RiT0' then
            case 
            when coalesce(t2.aat,0) = 0 then NULL
            else e.deger1/t2.aat    
            end
       end as decimal(15,4)) as Oran2
    from elektrik e
    cross apply (
       select deger1 
       from elektrik e1 
       where e.SayacNo = e1.SayacNo and 
            e1.Sayac_Tur_Degeri = 'A-RcT0',A+AT0
    ) t1(arc)
    cross apply (
       select deger1 
       from elektrik e2 
       where e.SayacNo = e2.SayacNo and 
            e2.Sayac_Tur_Degeri = 'A+AT0'
    ) t2(aat);
    

    Bir baska yolu:

    with ePivot (SayacNo, ari, arc, aat) as (
    select SayacNo, 
           sum(case When Sayac_Tur_Degeri = 'A+RiT0' then deger1 end),
           sum(case When Sayac_Tur_Degeri = 'A-RcT0' then deger1 end),
           sum(case When Sayac_Tur_Degeri = 'A+AT0'  then deger1 end)
    from elektrik
    group by SayacNo)
    select deger1, SayacNo, Sayac_Tur_Degeri,
       cast(when Sayac_Tur_Degeri = 'A+RiT0' then
            case 
    		when coalesce(p.aat,0) = 0 then NULL
            else p.arc/p.aat    
            end 
       end as decimal(15,4)) as Oran1,
       cast(when Sayac_Tur_Degeri = 'A+RiT0' then
            case 
            when coalesce(p.aat,0) = 0 then NULL
            else e.deger1/p.aat    
            end
       end as decimal(15,4)) as Oran2
    from elektrik e
    inner join ePivot p on e.SayacNo = p.SayacNo;
    Her ikisinin de daga farklı yazımları mumkun.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    17 Eylül 2019 Salı 12:58
  • hocam şöyle yazmıştım. (DEGER1 sütunu NULL ve 0 değeride alabiliyor. bunları da hesaba katarak ve Ayrıca boş kalan 2 satıra nasıl bir çözüm bulabilirim)

    Yukarıdaki kodu benim scripte nasıl entegre edeceğim. kusura bakmayın..

    17 Eylül 2019 Salı 14:07
  • Kusura bakma sorularını anlayamıyorum. Soru sorarken ornek veri ve istediğin ciktisini da vermelisin.


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    17 Eylül 2019 Salı 16:41