我有一张这样的桌子:
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,但在第一个查询的结果中未找到,则最终结果的数量为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"
怎么可能?
答案 0 :(得分:1)
对子查询使用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