SQLite - Joindre 2 tables à l'exclusion de certaines lignes en fonction d'une chaîne partielle match

0

La question

Imaginez, j'ai deux tables:

Une Table

Les noms de Vente Département
Dave 5 Chaussures
mike 6 Vêtements
Dan 7 Avant La Fin De

Tableau B

Les noms de VENTE Département
Dave 5 Chaussures
mike 12 Vêtements
Dan 7 Avant La Fin De
Gregg 23 Chaussures
Kim 15 Avant La Fin De

Je veux créer une requête qui joint les tables des noms et sépare la somme des ventes par table. J'ai en outre souhaitez filtrer ma requête pour supprimer la chaîne d'allumettes ou partielle matches dans ce cas, par certains noms.

Ce que je veux, c'est le résultat suivant

Tableau C:

Une Vente De Somme B Somme Des Ventes
18 24

Je sais que je peux le faire avec une requête du genre:

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

Le problème, c'est la clause where ne semble pas s'appliquer, ou s'applique à la mauvaise table. Depuis les Noms de colonne, ne correspond pas exactement entre les deux, ce que je pense qui se passe, c'est quand ils sont rejoints 'SUR B. noms = A. les Noms, les extras de B sont exclus? Quand je feuillette les choses autour, mais j'obtiens le même résultat, qui est l'absence de filtre appliqué. Le mauvais résultat que j'obtiens est le suivant:

Tableau D:

Une Vente De Somme B Somme Des Ventes
18 62

Clairement, j'ai un problème de syntaxe ici car je suis assez nouveau à SQL. Ce qui me manque? Merci!

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

La meilleure réponse

0

Vous n'avez pas besoin d'une jointure ou une union de l'tables et vous ne devriez pas le faire.
Total dans chaque tableau séparément et de retourner les résultats avec 2 sous-requêtes:

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

Est-il possible d'utiliser des sous-requêtes de ce genre pour ajouter plusieurs lignes? Comme permet de dire que je n'ai séparé les tables de données de vente pour chaque département, et je voulais que chaque ligne dans ma requête à un autre étiquetés département, pourrais-je utiliser le format que vous avez donné ici pour faire quelque chose comme ça?
carlb710

@carlb710 chaque sous-requête renvoie seulement 1 ligne et 1 colonne. Si vous souhaitez plus de 1 lignes vous devez utiliser plus de 1 requêtes comme la requête ci-dessus combiné avec l'UNION, mais peut-être que ce ne serait pas la meilleure façon de faire ce que vous voulez. C'est mieux de poster une nouvelle question où vous expliquez ce que vous voulez avec les données de l'échantillon et les résultats attendus.
forpas
0

Je pense que vous voulez une approche de l'union ici:

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;

Voici une démo montrant que la requête ci-dessus est le travail.

2021-11-23 01:39:07

Je vous remercie de prendre le temps de lire ma question et donner une réponse avant de se précipiter pour dire que c'est incomplet. Suggestions!
carlb710

@carlb710 Merci et bienvenue à Débordement de Pile! Si cette réponse a résolu votre problème, alors s'il vous plaît envisager d'accepter , en cliquant sur la coche verte à gauche.
Tim Biegeleisen

serait-ce de travailler avec chaîne partielle des matches? dire que j'ai été le filtrage des Chaînes qui ne sont pas des noms avec plusieurs mots. Je ne pouvais PAS utiliser DANS des ('%mot%')?
carlb710

Dans d'autres langues

Cette page est dans d'autres langues

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