SQLite-Kısmi dize eşleşmesine dayalı belirli satırlar hariç 2 tabloya katılma

0

Soru

İki masam olduğunu hayal et:

Tablo A

Adlar Satışlar Bölüm
Dave 5 Ayakkabı
mikrofon 6 Giyim
Dan 7 Ön Uç

Tablo B

Adlar satışlar Bölüm
Dave 5 Ayakkabı
mikrofon 12 Giyim
Dan 7 Ön Uç
Gregg 23 Ayakkabı
Kim 15 Ön Uç

Tabloları adlara göre birleştiren ve satışların toplamını tabloya göre ayıran bir sorgu oluşturmak istiyorum. Ayrıca, bu durumda dize eşleşmelerini veya kısmi eşleşmeleri belirli adlarla kaldırmak için sorgumu filtrelemek istiyorum.

İstediğim şey şu sonuçtur

Tablo C:

Bir Satış Toplamı B Satış Toplamı
18 24

Bunu aşağıdaki gibi bir sorgu ile yapabileceğimi biliyorum:

SELECT SUM(A.sales) AS 'A Sales Sum', SUM(B.sales) AS 'B sales Sum' FROM A
JOIN B
ON B.names = A.Names
WHERE Names NOT LIKE '%Gregg%' OR NOT LIKE '%Kim%'

Bununla ilgili sorun, WHERE yan tümcesinin geçerli görünmemesi veya yanlış tabloya uygulanmasıdır. İsimler sütunu ikisi arasında tam olarak uyuşmadığından, 'B. names = A. Names' üzerine katıldıklarında, B'den gelen ekstralar hariç tutuluyor mu? Yine de bir şeyleri çevirdiğimde aynı sonucu alıyorum, ki bu filtre uygulanmıyor. Aldığım yanlış sonuç şudur:

Tablo D:

Bir Satış Toplamı B Satış Toplamı
18 62

Açıkçası, Sql'de oldukça yeni olduğum için burada bir sözdizimi sorunum var. Neyi kaçırıyorum? Teşekkürler!

left-join sql-like sqlite sum
2021-11-23 01:33:05
2

En iyi cevabı

0

Masaların birleşmesine ya da birleşmesine ihtiyacınız yok ve bunu yapmamalısınız.
Her tabloda ayrı ayrı toplayın ve sonuçları 2 alt sorgu ile döndürün:

SELECT 
  (SELECT SUM(Sales) FROM A WHERE Names NOT LIKE '%Gregg%' AND Names NOT LIKE '%Kim%') ASalesSum,
  (SELECT SUM(Sales) FROM B WHERE Names NOT LIKE '%Gregg%' AND Names NOT LIKE '%Kim%') BSalesSum
2021-11-23 07:02:45

Birden çok satır eklemek için bunun gibi alt sorguları kullanmanın bir yolu var mı? Diyelim ki her departman için ayrı satış verisi tablolarım var ve sorgumdaki her satırın farklı etiketli bir departman olmasını istedim, burada verdiğiniz formatı böyle bir şey yapmak için kullanabilir miyim?
carlb710

@ carlb710 her alt sorgu yalnızca 1 satır ve 1 sütun döndürür. 1'den fazla satır istiyorsanız, yukarıdaki sorgu gibi UNION ile birleştirilmiş 1'den fazla sorgu kullanmalısınız, ancak belki de bu, istediğinizi yapmanın en iyi yolu olmayacaktır. Örnek verilerle ve beklenen sonuçlarla ne istediğinizi açıkladığınız yeni bir soru göndermek daha iyidir.
forpas
0

Bence burada sendika yaklaşımı istiyorsun.:

SELECT
    SUM(CASE WHEN src = 'A' THEN sales ELSE 0 END) AS "A Sales Sum",
    SUM(CASE WHEN src = 'B' THEN sales ELSE 0 END) AS "B Sales Sum"
FROM
(
    SELECT sales, 'A' AS src FROM A WHERE Names NOT IN ('Gregg', 'Kim')
    UNION ALL
    SELECT sales, 'B' FROM B WHERE Names NOT IN ('Gregg', 'Kim')

) t;

İşte yukarıdaki sorgunun çalıştığını gösteren bir demo.

2021-11-23 01:39:07

Teşekkür ederim aslında ayırdığınız zaman için benim okuma soru-cevap ver önce. acele yazıyor eksik. Faydalı öneri!
carlb710

@ carlb710 Teşekkürler ve Stack Overflow'a hoş geldiniz! Bu cevap sorununuzu çözdüyse, lütfen soldaki yeşil onay işaretini tıklatarak kabul etmeyi düşünün.
Tim Biegeleisen

bu kısmi dize eşleşmeleri ile çalışır mı? içinde birden çok sözcük olan ad olmayan dizeleri filtrelediğimi varsayalım. NOT İN LİKE ('%a word%') kullanabilir miyim?
carlb710

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................