сравнить две таблицы или запрос и таблицу - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть одна такая таблица:

cp_store  name    qty
"Cp1"   "pesto" "1.0"
"Cp1"   "jivara"    "1.0"
"Cp1"   "Nocciola"  "1.0"
"Cp1"   "Parfait"   "1.0"
"Cp1"   "Crema" "1.0"
"Cp1"   "Crema" "1.0"
"Cp1"   "Malaga"    "1.0"
"Cp1"   "Ricotta_Limone"    "1.0"
"Cp1"   "Ricotta_Limone"    "1.0"
"Cp1"   "Ricotta_Limone"    "1.0"
"Cp1"   "mango" "1.0"
"Cp1"   "Lampone"   "1.0"
"Cp1"   "Limone_zenzero"    "1.0"
"Cp1"   "Limone_zenzero"    "1.0"
"Cp1"   "Limone_zenzero"    "1.0"
"Cp1"   "Limone_zenzero"    "1.0"
"Cp1"   "Pistacchio"    "1.0"
"Cp1"   "Caramello_Salato"  "1.0"
"Cp1"   "albicocca" "1.0"
"Cp1"   "Pistacchio"    "1.0"
"Cp1"   "Pistacchio"    "1.0"
"Cp1"   "Pistacchio"    "1.0"
"Cp1"   "Cioccolato"    "1.0"
"Cp1"   "Cioccolato"    "1.0"
"Cp1"   "Cioccolato"    "1.0"
"Cp1"   "Bacio_Siculo"  "1.0"
"Cp1"   "Bacio_Siculo"  "1.0"
"Cp1"   "Bacio_Siculo"  "1.0"
"Cp1"   "Cioccolato_al_rum" "1.0"
"Cp1"   "Cioccolato"    "1.0"
"Cp1"   "Cioccolato"    "1.0"
"Cp1"   "Cioccolato"    "1.0"
"nice1" "Cioccolato"    "1.0"
"nice1" "Cioccolato"    "1.0"
"nice1" "Cioccolato"    "1.0"
"nice1" "Bacio_Siculo"  "1.0"
"nice1" "Bacio_Siculo"  "1.0"
"nice1" "Bacio_Siculo"  "1.0"
"nice1" "Cioccolato_al_rum" "1.0"
"nice1" "Cioccolato_al_rum" "1.0"

и я использую этот запрос

SELECT cp_store, nome, SUM(CAST(qta AS DECIMAL(10, 1))) AS total 
FROM tb_store 
WHERE  data_out is null 
GROUP BY cp_store, nome 
ORDER BY cp_store, nome

чтобы получить это:

cp_store  name    qty
 "Cp1"  "Cioccolato"    "6.0"
 "Cp1"  "Cioccolato_al_rum" "1.0"
 "Cp1"   "Bacio_Siculo"  "3.0"
 "nice1"  "Cioccolato_al_rum" "2.0"
 "nice1"  "Bacio_Siculo"  "3.0"
.
.
.

но я бы хотел сравнить имя результата с этой таблицей:

id name        presence cp_store 
1 "Cioccolato"  "1" "All" 
2 "Bacio_Siculo"    "1" "All" 
3 "Ricotta_Limone"  "1" "All" 
4 "Cioccolato_al_rum"   "1" "All" 
5 "Pistacchio"  "1" "All" 
6 "Nocciola"    "1" "nice1" 
7 "Mascarpone"  "1" "Cp1"
8 "Limone"  "0" "Cp1"

. , .

и если присутствует имя и cp_store равно ALL, но не было найдено в результате первого запроса, конечный результат qty этого значения равен 0, как это:

cp_store    name                 qty
 "Cp1"      "Cioccolato"        "6.0"
 "Cp1"      "Cioccolato_al_rum" "1.0"
 "Cp1"      "Bacio_Siculo"      "3.0"
 "nice1"    "Cioccolato_al_rum" "2.0"
 "nice1"    "Bacio_Siculo"      "3.0"
 "All"      "Pistacchio"        "0"
 "All"      "Limone"            "0"

как это возможно?

1 Ответ

0 голосов
/ 06 сентября 2018

Используйте LEFT JOIN с подзапросом и используйте 0 в качестве значения по умолчанию для qty, если оно не найдено.

SELECT COALESCE(t2.cp_store, 'All') AS cp_store, t1.name, COALESCE(t2.total, 0) AS qty
FROM tb_products AS t1
LEFT JOIN (
    SELECT cp_store, nome, SUM(CAST(qta AS DECIMAL(10, 1))) AS total 
    FROM tb_store 
    WHERE  data_out is null 
    GROUP BY cp_store, nome 
    ORDER BY cp_store, nome) AS t2 ON t1.name = t2.nome
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...