嗨,我正在处理一个SQL查询。下面是我执行查询的方法名称。
private string GetAggregatedOptionParametersByStyleIdCommand(string styleId, bool currentStore)
{
SELECT
opts.style, opts.option::text as {OptionKey}, opts.primary_colour, opts.secondary_colour, opts.brand_description, opts.description, params.*,
CASE WHEN {currentStore} == true THEN
FROM
rex.options opts
JOIN
rex.product_atoms atoms ON atoms.option_id = opts.option
JOIN
rex.parameters params ON atoms.id = params.product_atom_id
JOIN
rex.stores stores ON params.store = stores.id
WHERE
opts.style = '{styleId}'
}
以下是stores表的结构。
CREATE TABLE rex.stores (
id serial NOT NULL,
close_date timestamp NOT NULL,
country text NULL,
distribution_centre text NULL,
"name" text NULL,
open_date timestamp NOT NULL,
CONSTRAINT "PK_stores" PRIMARY KEY (id)
);
所以我想做的是,只要currentStore为true,那么我想返回当前商店。检查currentStore的条件是
store.OpenDate <= currentDate &&
store.CloseDate >= currentDate
每当currentStore为false时,我都想返回所有商店。要检查所有存储条件是
store.CloseDate >= currentDate
我正在尝试在SQL查询中添加这些条件。我已经添加了CASE WHEN {currentStore} == true THEN
,但不确定如何添加关闭的商店条件。谁能帮助我完成此查询?任何帮助,将不胜感激。谢谢。
答案 0 :(得分:0)
如果要检查其他可能性,可以在WHEN
语句中添加另一个ELSE
或CASE
条件。这些需要放在END
之前。
例如:
CASE
WHEN x < 0 THEN 'negative'
WHEN x > 0 THEN 'positive'
ELSE 'zero'
END
我对postgres并不熟悉,您可能不需要END
,并且您也可以说CASE x WHEN > 0 THEN... WHEN < 0 ...
,这意味着您只需要在CASE
之后提及x。再次,这在postgres中可能不是问题。