SQL EXCEPT VE INTERSECT

Katılım
15 Mayıs 2015
Mesajlar
518
Excel Vers. ve Dili
Microsoft Office 2019
Merhabalar
2 tablonun sayılarını karşılaştırmak istiyorum. sorguyu yazamadım bir türlü
236764236765
EXCEPT VE INTERSECT ile yapıldığını düşünüyorum.
. yardımlarınızı bekliyorum
             
 

TABLO1

   

TABLO2

  

SQL SORGU SONUCU

    
             
 

kalemno

kalem

adet

 

kalemno

kalem

 

kalemno

kalem

tablo1

tablo2

 
 

5

vazo

3

 

5

vazo

 

5

vazo

3

3

 
 

15

küre

2

 

5

vazo

 

15

küre

2

3

 
 

22

saksı

4

 

5

vazo

 

22

saksı

4

1

 
 

17

sünger

3

 

15

küre

 

17

sünger

3

0

 
     

15

küre

 

67

avize

0

3

 
     

15

küre

      
     

22

saksı

      
     

67

avize

      
     

67

avize

      
     

67

avize

      
     

67

avize

      
             
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,366
Excel Vers. ve Dili
Office 2013
Merhaba;

Tablo yapılarında sorun var gibi görünüyor. Sql Server Normalizasyon diye araştırabilirsiniz. Sanırım bir de ürün(kalem) lerin tanımlı olduğu bir tablo olmalı.

id- kalem
1-ürün_adı
... - ............
5 - vazo
...-........
15-küre
...............

Önce bunu netleştirin sonra sorgu sonucuna bakalım..

Yine de örnek sorguyu yazmaya çalışayım..

SQL:
SELECT        dbo.Tablo1.kalemNo, dbo.Tablo1.kalem AS urun, dbo.Tablo1.adet AS Tablo1s, COUNT(dbo.tablo2.kalem) AS Tablo2s
FROM            dbo.Tablo1 INNER JOIN
                         dbo.tablo2 ON dbo.Tablo1.kalemNo = dbo.tablo2.kalem
GROUP BY dbo.Tablo1.kalem, dbo.Tablo1.adet, dbo.Tablo1.kalemNo
 
Son düzenleme:

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,268
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Merhaba @beab05 ;

Aşağıdaki satırda sanırım "kırmızı" ile işaretlediğim revizyonu yapmak gerekiyor;

Rich (BB code):
ON dbo.Tablo1.kalemNo = dbo.tablo2.kalemNo

Gerçi yine de bu sorgu, istenilen tablonun tamamını üretmez sanırım..... Tablo1'deki kalemNo'lar Tablo2'de varsa, onların miktarını listeler.

Burada istenilen daha çok, "Full Outer Join" gibi sanırım. Yani her 2 tabloda olan, olmayan ne varsa sonuç tablosuna dökecek.


.
 
Son düzenleme:

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,366
Excel Vers. ve Dili
Office 2013
Selam @Haluk;

Haklısın full outer le her tablodaki veriler gelir.
 
Katılım
15 Mayıs 2015
Mesajlar
518
Excel Vers. ve Dili
Microsoft Office 2019
Akşam deneyip sonucu yazacağım . aynen kalemlerin yazdığı bir tablo daha var. Yukarıdaki tablo sadece temsili.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,268
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Konu hakkında MS Excel üzerinde bir deneme yaptım. Bu çalışmada; 1.mesajda verilen örnek tabloları Sheet1 ve Sheet2 sayfalarına yerleştirdikten sonra, ADO kullanarak "Full Outer Join" MS Excel'de desteklenmediği için onun yerine iş görecek aşağıdaki sorguyu hazırladım.

Tablolar ve sorgu sonucu aşağıdaki resimlerde belirtildiği gibidir.

Kod:
    strSQL = "Select Table1.[KalemNo], Table1.[Kalem], Table1.[Adet] As Adet1, " & _
             "Table2.[KalemNo], Table2.[Kalem], Count(Table2.[KalemNo]) As Adet2 " & _
             "From [Sheet1$A1:C] as Table1 " & _
             "Inner Join " & _
             "[Sheet2$A1:C] As Table2 " & _
             "On Table1.[KalemNo] = Table2.[KalemNo] " & _
             "Group By Table1.[KalemNo], Table1.[Kalem], Table1.[Adet], Table2.[KalemNo], Table2.[Kalem] " & _
             "Union All " & _
             "Select Table1.[KalemNo], Table1.[Kalem], Table1.[Adet], " & _
             "Table2.[KalemNo], Table2.[Kalem], Count(Table2.[KalemNo]) " & _
             "From [Sheet1$A1:C] as Table1 " & _
             "Left Join " & _
             "[Sheet2$A1:C] As Table2 " & _
             "On Table1.[KalemNo] = Table2.[KalemNo] " & _
             "Where Table2.[KalemNo] Is Null " & _
             "Group By Table1.[KalemNo], Table1.[Kalem], Table1.[Adet], Table2.[KalemNo], Table2.[Kalem] " & _
             "Union All " & _
             "Select Table1.[KalemNo], Table1.[Kalem], Table1.[Adet], " & _
             "Table2.[KalemNo], Table2.[Kalem], Count(Table2.[KalemNo]) " & _
             "From [Sheet1$A1:C] as Table1 " & _
             "Right Join " & _
             "[Sheet2$A1:C] As Table2 " & _
             "On Table1.[KalemNo] = Table2.[KalemNo] " & _
             "Where Table1.[KalemNo] Is Null " & _
             "Group By Table1.[KalemNo], Table1.[Kalem], Table1.[Adet], Table2.[KalemNo], Table2.[Kalem] "


Sheet1 sayfası:

Tablo1.PNG



Sheet2 sayfası:

Tablo2.PNG



Sorgu sonucunun alındığı Sheet3 sayfası:

Query.PNG


.
 
Son düzenleme:

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,268
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Aşağıdaki sorgu hem daha kısa hem de MS Excel'de istenilen tabloyu tam olarak oluşturuyor;

Örnek dosya ektedir....

C#:
    strSQL = " Select [Sheet1$].[KalemNo] As KalemNo, [Sheet1$].[Kalem] As Kalem, [Sheet1$].[Adet] As Adet1, " & _
             " Count([Sheet2$].[KalemNo]) As Adet2 " & _
             " From [Sheet1$] " & _
             " Left Join " & _
             " [Sheet2$] On [Sheet1$].[KalemNo] = [Sheet2$].[KalemNo] " & _
             " Group By [Sheet1$].[KalemNo], [Sheet1$].[Kalem], [Sheet1$].[Adet] " & _
             " Union All " & _
             " Select [Sheet2$].[KalemNo] As KalemNo, [Sheet2$].[Kalem] As Kalem, [Sheet1$].[Adet] As Adet1, " & _
             " Count([Sheet2$].[KalemNo]) As Adet2 " & _
             " From [Sheet1$] " & _
             " Right Join " & _
             " [Sheet2$] On [Sheet1$].[KalemNo] = [Sheet2$].[KalemNo] " & _
             " Where [Sheet2$].[KalemNo] Not In (Select [KalemNo] From [Sheet1$]) " & _
             " Group By [Sheet2$].[KalemNo], [Sheet2$].[Kalem], [Sheet1$].[Adet]"

Query.PNG


.
 

Ekli dosyalar

Katılım
15 Mayıs 2015
Mesajlar
518
Excel Vers. ve Dili
Microsoft Office 2019
Haluk bey;
Gerçekten çok güzel olmuş. Kendi projeme tasarladım oldu. Teşekkür ederim.

Beab05;

Sizede çok teşekkür ederim. Sizin kodu dün akşam denedim. Ama hala sonuç alamadım. Akşam tekrar deneyeceğim. Dün Çok kısa zamanım vardı. Sonucu yazacağım
 
Üst