SQLite - Spojení 2 tabulek vyloučení některých řádků na základě dílčí řetězec zápas

0

Otázka

Představte si, že mám dvě tabulky:

Stůl

Jména Prodej Oddělení
Dave 5 Boty
mike 6 Oblečení
Dan 7 Front-End

Tabulka B

Jména PRODEJ Oddělení
Dave 5 Boty
mike 12 Oblečení
Dan 7 Front-End
Gregg 23 Boty
Kim 15 Front-End

Chci vytvořit dotaz, který se připojí do tabulky podle jména a dělí součet tržeb o stůl. Já navíc chci, aby filtr můj dotaz odstranit řetězec odpovídá nebo částečné shody v tomto případě tím, že určité názvy.

To, co chci, je následující výsledek

Tabulka C:

Prodejní Částky B Prodejní Částky
18 24

Vím, že tento dotaz jako následující:

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%'

Problém s tímto je, KDE klauzule nezdá se, že platí, nebo se vztahuje na špatnou tabulku. Od Jména sloupce nemusí přesně odpovídat mezi dvěma, co si myslím, že se děje, je, když jsou spojeny NA Př. jména = A. Jména', doplňky od B jsou vyloučeny? Když jsem se otočit věci kolem i když jsem se dostat stejný výsledek, který je žádný filtr uplatňována. Špatný výsledek jsem dostal, je následující:

Tabulka D:

Prodejní Částky B Prodejní Částky
18 62

Jasně mám syntaxe problém, protože jsem docela nový SQL. Co jsem chybí? Díky!!!

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

Nejlepší odpověď

0

Nepotřebujete připojit nebo unie tabulek a neměla bys to dělat.
Agregát v každé tabulky zvlášť a vrátit výsledky s 2 poddotazy:

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

Existuje způsob, jak používat poddotazy takhle přidat více řádků? Jako řekněme, že mám samostatné tabulky data prodeje pro každé oddělení, a já jsem chtěl, každý řádek v mém dotazu na to být jiný označeny oddělení, mohl bych použít formát, který jste zde dal udělat něco takového?
carlb710

@carlb710 každý poddotaz vrací jen 1 řádek a 1 sloupec. Pokud budete chtít více než 1 řádků, měli byste použít více než 1 dotazy jako výše uvedený dotaz v kombinaci s UNIÍ, ale možná to není nejlepší způsob, jak to udělat, co chcete. Je lepší přidat novou otázku, kde si vysvětlit, co chcete, s ukázkových dat a očekávané výsledky.
forpas
0

Myslím, že chceš unie přístup:

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;

Tady je demo , ukazující, že výše uvedený dotaz pracuje.

2021-11-23 01:39:07

Děkuji vám za skutečně čas přečíst mojí otázku a dát odpověď dříve, než řítí říct, že je to neúplné. Užitečné návrhy!
carlb710

@carlb710 Díky a vítejte na Přetečení Zásobníku! Pokud tato odpověď vyřešit váš problém, pak prosím zvážit přijetí , kliknutím na zelené zaškrtnutí vlevo.
Tim Biegeleisen

by tato práce se dílčí řetězec odpovídá? říct, že jsem byl filtrování Řetězců, které nejsou názvy s více slov v nich. Mohl bych použít NE JAKO ('%slovo%')?
carlb710

V jiných jazycích

Tato stránka je v jiných jazycích

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