Adosql ile veri çekme hücredeki bilgiye göre

arrow3441

Altın Üye
Katılım
31 Ekim 2022
Mesajlar
294
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
07-11-2024
Kontrol ediyorum hocam teşekkür ederim
 

arrow3441

Altın Üye
Katılım
31 Ekim 2022
Mesajlar
294
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
07-11-2024
Çok teşekkür ederim hocam aklınıza sağlık başka sayfa kullanmadan tek sql sorgusu olabilirmi acaba ?
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Ne gibi bir mahsuru var ?

İsterseniz o sayfayı gizlersiniz veya; lazım olduğunda o sayfayı VBA ile oluşturup, işi bitince silersiniz...

.
 

arrow3441

Altın Üye
Katılım
31 Ekim 2022
Mesajlar
294
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
07-11-2024
Bu dediğiniz mantıklı hocam bu şekilde yapabilrim teşekkür ederim tekrardan (( o sayfayı VBA ile oluşturup, işi bitince silersiniz..))
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Haluk Beyin müsadesiyle iki sorgusunun birleştirilmiş hali ve PQ çözümü
Ben de aynı mantıkla böyle yapmayı denemiş ama hata alınca vazgeçip, mecburen biraz daha uzun yola gitmiştim..... Herhalde bir syntax hatası falan bir şey yapmışımdır.....

Eline sağlık Veysel Bey.

.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Veysel Bey tarafından hazırlanan alternatif kod aşağıdadır. "TRANSFORM" yerine Subquery kullanılan bu kod da, gayet hızlı çalışmaktadır.

Veysel Beyin eline sağlık...

C#:
Sub getReport2()
'   Veysel Emre 14/03/2024
'   Alternatif kod

    Dim objConn As Object, RS As Object, SQLdata As String, strSQL As String, strArgs As String

    Sheets("Report").Range("A2:F" & Rows.Count).ClearContents

    Set objConn = CreateObject("ADODB.Connection")

    strArgs = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}; Readonly=False; DBQ=" & ThisWorkbook.FullName
    objConn.Open strArgs

    SQLdata = " Select [STOKKODU] AS SK, [MALINCINSI] AS MC, [URUN KATEGORI] AS UK, [URUN GRUPLARI] AS UG, Sum([NETCIKIS]) AS NC, 2023 As Year" & _
              " From [2023$] Where [STOKKODU] Is Not Null " & _
              " Group By [STOKKODU], [MALINCINSI], [URUN KATEGORI], [URUN GRUPLARI] " & _
              " Union All " & _
              " Select [STOKKODU] AS SK, [MALINCINSI] AS MC, [URUN KATEGORI] AS UK, [URUN GRUPLARI] AS UG, Sum([NETCIKIS]) AS NC, 2024 As Year" & _
              " From [2024$] Where [STOKKODU] Is Not Null" & _
              " Group By [STOKKODU], [MALINCINSI], [URUN KATEGORI], [URUN GRUPLARI]"

    strSQL = " Select SK, MC, UK, UG, Sum([NC2023]), Sum([NC2024]) From " & _
             "  ( " & _
             "    Select SK, MC, UK, UG, IIF(Year= 2023, NC) AS [NC2023], IIF(Year= 2024, NC) AS [NC2024] From " & _
             "       ( " & _
                       SQLdata & _
             "       )" & _
             "    )" & _
             " Group By SK, MC, UK, UG"

    Set RS = objConn.Execute(strSQL)

    Sheets("Report").Range("A2").CopyFromRecordset RS

    objConn.Close
    Set objConn = Nothing
End Sub

.
 

arrow3441

Altın Üye
Katılım
31 Ekim 2022
Mesajlar
294
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
07-11-2024
Elinize sağlık @Haluk hocam süper olmuş
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Alternatif icin Veysel Beyin eline saglik, ben sadece araciyim.... 😎

.
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,641
Excel Vers. ve Dili
Pro Plus 2021
Alternatif icin Veysel Beyin eline saglik, ben sadece araciyim.... 😎
@Haluk Bey emeğe gösterdiğiniz saygı için teşekkür ederim. Fakat burda asıl gayreti gösteren sizsiniz. Burada önemli olan 2 tablonun birleştirme fikri. Benim de daha önce forumda yaptığım örnek var fakat aklıma gelir miydi bilmiyorum. O yöntemle ilk çözümü sunmuşsunuz. Pivot fikri benim aklıma hiç gelmezdi. Bence en orjinal çözüm o fakat ağır çalışan bir yöntem.

Ayrıca en iyiye ulaşmak için gösterdiğiniz çaba da takdire şayan.
Zaten bu şekilde bir çaba olmazsa, çözüldü diye işin peşi bırakılsa idi, bir Raider olunmazdı.

Benim de sql le işim yok detaylı bir bilgiye sahip değilim daha önceden hazırladığım basit sorguları butona basarak kullanıyorum.
Zaten SQL de gelecekte pek kullanılmayacak gibi. Sadece eskiye bağımlılıktan kullanılıyor. Bu konuda geliştirme yapan yok.

Aslında soruyu soran arkadaş, tahmin ediyorum verileri Power Query ile alıyor. Aldığı sorgu düzenlense net bir şekilde hiç bir işlem yapmadan bu sonucu alabilir. SQL ile de alsa bile bu işlemi de verileri aldığı sorgu üzerinden yapabilir.

Bu çözümü daha önce denedim, yılları tek sütunda toplamıştı sonuç alamamıştım. Fakat ne hikmetse bugün çalıştı. Tek alt sorgu ile sonuç geliyor.
Kod:
Sub getData3()
    Sheets("Report").Range("A2:F" & Rows.Count).ClearContents
    With CreateObject("ADODB.Connection")
        .Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}; Readonly=False; DBQ=" & ThisWorkbook.FullName
        Sheets("Report").Range("A2").CopyFromRecordset .Execute( _
            " SELECT SK, MC, UK, UG,  SUM(NC2023) AS NC23, SUM(NC2024) AS NC24 FROM " & _
            " (  SELECT STOKKODU AS SK, MALINCINSI AS MC, [URUN KATEGORI] AS UK, [URUN GRUPLARI] AS UG, NETCIKIS AS NC2023, 0 AS NC2024" & _
            "    FROM [2023$] WHERE STOKKODU IS NOT NULL " & _
            "    UNION ALL " & _
            "    SELECT STOKKODU AS SK, MALINCINSI AS MC, [URUN KATEGORI] AS UK, [URUN GRUPLARI] AS UG, 0 AS NC2023, NETCIKIS AS NC2024" & _
            "    FROM [2024$] WHERE STOKKODU IS NOT NULL " & _
            " ) GROUP BY SK, MC, UK, UG ")
        .Close
    End With
End Sub
 
Son düzenleme:

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Veysel Bey, öncelikle nazik mesajınız için teşekkürler.....

"Raider" beni 20 yıl öncesine götürdü.... O yıllardan beri hep birlikte burada en iyiye, en doğruya ulaşmaya çalışıyoruz....

Son alternatifiniz de çok başarılı..... Bu mesaj başlığında verilen kodların hepsi "arşivlik" durumda oldu bence. SQL'e merakı olan için hazine değerinde alternatifler var.

.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,332
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
..... Zaten SQL de gelecekte pek kullanılmayacak gibi. Sadece eskiye bağımlılıktan kullanılıyor. Bu konuda geliştirme yapan yok.....
Bence yanılıyorsunuz... Kaynak var mı?

Her database sisteminin kendi dil takımına ihtiyacı vardır ve olmak zorundadır. Bunları low-level native code gibi düşünün. Bir de basit kullanıcılar için, native code ile zor gelen işleri no-code veya high-level kodlama kullanan Power Query vs var. Sanırım kastettiğiniz bu...

Aslında bu kadar çok yazmayacaktım ama, SQL sever biri olarak, cümlelerinizi düzeltme gereği duydum.

.
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,641
Excel Vers. ve Dili
Pro Plus 2021
Bence yanılıyorsunuz... Kaynak var mı?

Her database sisteminin kendi dil takımına ihtiyacı vardır ve olmak zorundadır. Bunları low-level native code gibi düşünün. Bir de basit kullanıcılar için, native code ile zor gelen işleri no-code veya high-level kodlama kullanan Power Query vs var. Sanırım kastettiğiniz bu...

Aslında bu kadar çok yazmayacaktım ama, SQL sever biri olarak, cümlelerinizi düzeltme gereği duydum.
.
Benim düşüncem bu. Halen 50 yıl öncesinin txt dosyalarının kullanıldığı bir dünyada SQL de kalkmaz ama ağırlığı gittikçe azalacak.

Ne VBA, ne SQL geleceğin sistemi değil. Yeni nesil hiç bir web sitesinde sql veritabanı kullanılmıyor. NoSQL database ler kullanılıyor.
Gelecekte zaten bütün sistem, bulut sistemlere ve NoSQL database lere kayacak.
Microsoft Excel'e Power Query yerine SQL Query koyabilirdi (önceden vardı kaldırdı yerine PQ getirdi) neden koymuyor.
Benim tahminim VBA da kalkacak yerine python gelecek.

Power Query meselesine gelince; SQL in yaptığı (insert/update) dışında bütün işlemleri mükemmel bir şekilde yapıyor.
Aynı anda her türlü veri kaynağından gelen verileri tek bir çatı altında birleştirip istediğiniz sorgulamayı yapabiliyorsunuz.
Öyle detaylı bir sistem ki, öncelikle çok zevkli, çok değişik kodlama sistemi var.
Algoritmasının bildiğimiz algoritmayla hiç alakası yok.
Bir çok iş çok basit komutlarla yapılabiliyor.
Ama işin detayına girildiği zaman aynı iş çok değişik kodlarla/yöntemlerle yapılabiliyor.
Ama yinede basit işlemler dışında öğrenilmesi zor (bana öyle geldi, normal algoritma yöntemiyle düşündüğüm için).
Örneğin vba da yazdığım kodların nerdeyse tamamına yakınında for next döngüsünü kullanıyorum. Sırayla bütün işlemleri yapıyorum.
Ama PQ'de direkt olarak for next döngüsü yok onun yerine index ekleyip, listeye dönüştürerek, işlemler yapılıyor.
Bu da alışılmışın dışında olduğu için zor geliyor.
Ayrıca PQ için iyi bir donanım gerekiyor. Benim sistem fazla kaldırmıyor.

Benim için bilgisayarın %90 ı Excel demek. Excel'in de %90 ı VBA. Vba nın da % 50 si dictionary.

İşin özeti halen dictionary bile kullanan sayısı çok az. Yani biz burada körler sağırlar birbirini ağırlar yapıyoruz.
Dön dolaş aynı şeyler. Benim için güzel bir ortam sudoku çözeceğime kod yazıyorum. Arada sırada yabancı sitelere takılıyorum ama yabancı dil olmayınca sıkıyor. Bu kadar.
 
Son düzenleme:
Üst