SQLite:取决于行存在的条件 Where 子句
SQLite: Conditional Where Clause depending on Row Existence
我有一个相当复杂的 SQLite 查询:
select TDELIVER.ROWID, TDELIVER.DELSERN, COMSERNO, DELDATASRC, DELDATE,(select sum(CASE WHEN (DELEORDUNI == 'CASE' or PRODCOMP == 1) and DELEACTVOL > 0 and PRODPALLET = 0 THEN DELEACTVOL/PRODSIZE WHEN (DELEORDUNI == 'CASE' or PRODCOMP == 1) and DELEACTVOL > 0 THEN DELEACTVOL ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfPalletsDelivered,(select sum(CASE WHEN (DELEORDUNI == 'CASE' or PRODCOMP == 1) and DELEACTVOL < 0 THEN DELEACTVOL ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfPalletsCompensated,(select sum(CASE WHEN (DELEORDUNI != 'CASE' and PRODCOMP != 1) and DELEACTVOL > 0 THEN ROUND(DELEACTVOL/PRODSIZE,0) ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfCasesDelivered,(select sum(CASE WHEN (DELEORDUNI != 'CASE' and PRODCOMP != 1) and DELEACTVOL < 0 THEN DELEACTVOL/PRODSIZE ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfCasesCompensated,(select sum(DELEACTVOL * DELEPRICE) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) TotalPriceOfDelivery,
replace(group_concat(distinct TPGROUPS.PGRPVAL), ',', ', ') as Brands
from TDELIVER
inner join TDELENTR on TDELENTR.DELSERN=TDELIVER.DELSERN inner join
LPROPGR on LPROPGR.PRODSERN=TDELENTR.PRODSERN inner join TPGROUPS on
TPGROUPS.PGRSERN= LPROPGR.PGRSERN
where COMSERNO='501000000002118' and PGRPNAME COLLATE NOCASE in
(select SETVALUE from TSETTING where SETKEY = 'ProductGroup')
GROUP BY TDELIVER.ROWID
这 return 是一个品牌列表。但是,有时,SELECT EXISTS(SELECT 1 FROM TSETTING WHERE SETKEY="ProductGroup" LIMIT 1);
不会 return 1,在这种情况下,我想 运行 一个更简单的查询:
select TDELIVER.ROWID, TDELIVER.DELSERN, COMSERNO, DELDATASRC, DELDATE,(select sum(CASE WHEN (DELEORDUNI == 'CASE' or PRODCOMP == 1) and DELEACTVOL > 0 and PRODPALLET = 0 THEN DELEACTVOL/PRODSIZE WHEN (DELEORDUNI == 'CASE' or PRODCOMP == 1) and DELEACTVOL > 0 THEN DELEACTVOL ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfPalletsDelivered,(select sum(CASE WHEN (DELEORDUNI == 'CASE' or PRODCOMP == 1) and DELEACTVOL < 0 THEN DELEACTVOL ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfPalletsCompensated,(select sum(CASE WHEN (DELEORDUNI != 'CASE' and PRODCOMP != 1) and DELEACTVOL > 0 THEN ROUND(DELEACTVOL/PRODSIZE,0) ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfCasesDelivered,(select sum(CASE WHEN (DELEORDUNI != 'CASE' and PRODCOMP != 1) and DELEACTVOL < 0 THEN DELEACTVOL/PRODSIZE ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfCasesCompensated,(select sum(DELEACTVOL * DELEPRICE) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) TotalPriceOfDelivery
from TDELIVER
where COMSERNO='501000000002118'
(我使用块引号来显示 相同的代码 ,除了第一个块末尾的逗号)
我的问题是,如果 SELECT EXISTS(SELECT 1 FROM TSETTING WHERE SETKEY="ProductGroup" LIMIT 1)
是假的,品牌列表是真的吗?
帮助说明问题的一些屏幕截图:
简单案例:
复杂案例:
要根据条件执行两个不同的查询,请使用 compound query:
SELECT * FROM (SELECT ...)
WHERE x
UNION ALL
SELECT * FROM (SELECT ...)
WHERE NOT x;
我有一个相当复杂的 SQLite 查询:
select TDELIVER.ROWID, TDELIVER.DELSERN, COMSERNO, DELDATASRC, DELDATE,(select sum(CASE WHEN (DELEORDUNI == 'CASE' or PRODCOMP == 1) and DELEACTVOL > 0 and PRODPALLET = 0 THEN DELEACTVOL/PRODSIZE WHEN (DELEORDUNI == 'CASE' or PRODCOMP == 1) and DELEACTVOL > 0 THEN DELEACTVOL ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfPalletsDelivered,(select sum(CASE WHEN (DELEORDUNI == 'CASE' or PRODCOMP == 1) and DELEACTVOL < 0 THEN DELEACTVOL ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfPalletsCompensated,(select sum(CASE WHEN (DELEORDUNI != 'CASE' and PRODCOMP != 1) and DELEACTVOL > 0 THEN ROUND(DELEACTVOL/PRODSIZE,0) ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfCasesDelivered,(select sum(CASE WHEN (DELEORDUNI != 'CASE' and PRODCOMP != 1) and DELEACTVOL < 0 THEN DELEACTVOL/PRODSIZE ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfCasesCompensated,(select sum(DELEACTVOL * DELEPRICE) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) TotalPriceOfDelivery,
replace(group_concat(distinct TPGROUPS.PGRPVAL), ',', ', ') as Brands
from TDELIVER
inner join TDELENTR on TDELENTR.DELSERN=TDELIVER.DELSERN inner join
LPROPGR on LPROPGR.PRODSERN=TDELENTR.PRODSERN inner join TPGROUPS on
TPGROUPS.PGRSERN= LPROPGR.PGRSERN
where COMSERNO='501000000002118' and PGRPNAME COLLATE NOCASE in
(select SETVALUE from TSETTING where SETKEY = 'ProductGroup')
GROUP BY TDELIVER.ROWID
这 return 是一个品牌列表。但是,有时,SELECT EXISTS(SELECT 1 FROM TSETTING WHERE SETKEY="ProductGroup" LIMIT 1);
不会 return 1,在这种情况下,我想 运行 一个更简单的查询:
select TDELIVER.ROWID, TDELIVER.DELSERN, COMSERNO, DELDATASRC, DELDATE,(select sum(CASE WHEN (DELEORDUNI == 'CASE' or PRODCOMP == 1) and DELEACTVOL > 0 and PRODPALLET = 0 THEN DELEACTVOL/PRODSIZE WHEN (DELEORDUNI == 'CASE' or PRODCOMP == 1) and DELEACTVOL > 0 THEN DELEACTVOL ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfPalletsDelivered,(select sum(CASE WHEN (DELEORDUNI == 'CASE' or PRODCOMP == 1) and DELEACTVOL < 0 THEN DELEACTVOL ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfPalletsCompensated,(select sum(CASE WHEN (DELEORDUNI != 'CASE' and PRODCOMP != 1) and DELEACTVOL > 0 THEN ROUND(DELEACTVOL/PRODSIZE,0) ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfCasesDelivered,(select sum(CASE WHEN (DELEORDUNI != 'CASE' and PRODCOMP != 1) and DELEACTVOL < 0 THEN DELEACTVOL/PRODSIZE ELSE 0 END) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) NumberOfCasesCompensated,(select sum(DELEACTVOL * DELEPRICE) from TDELENTR inner join TPRODUCT on TDELENTR.PRODSERN=TPRODUCT.PRODSERN where DELSERN = TDELIVER.DELSERN) TotalPriceOfDelivery
from TDELIVER
where COMSERNO='501000000002118'
(我使用块引号来显示 相同的代码 ,除了第一个块末尾的逗号)
我的问题是,如果 SELECT EXISTS(SELECT 1 FROM TSETTING WHERE SETKEY="ProductGroup" LIMIT 1)
是假的,品牌列表是真的吗?
帮助说明问题的一些屏幕截图:
简单案例:
复杂案例:
要根据条件执行两个不同的查询,请使用 compound query:
SELECT * FROM (SELECT ...)
WHERE x
UNION ALL
SELECT * FROM (SELECT ...)
WHERE NOT x;