• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

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






































 
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:
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:
Selam @Haluk;

Haklısın full outer le her tablodaki veriler gelir.
 
Akşam deneyip sonucu yazacağım . aynen kalemlerin yazdığı bir tablo daha var. Yukarıdaki tablo sadece temsili.
 
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:
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

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
 
Geri
Üst