对不起,如果标题很奇怪,我想不出一个更好的解释情况。查询的“WHERE / CASE”部分,截至目前:
where CO_SEGMENT LIKE case (outsideVar)
when 9999 then '%'
when 9001 then '9002' --9013, 9014, 9015
when 9003 then '901[345]'
when 9004 then '900[56]'
when 9007 then '900[89]'
else (outsideVar)
end
这个想法是我有一个产品列表,以及一个分组产品列表。我的问题是针对某些细分市场,因为我需要他们列出“喜欢冲突”细分的产品。
从上面的例子中,段9001包含段9002和9003 - 但9003是'假段',他包含段9013到9015.我不能放90[01][2345]
因为它包含来自段{{1}的产品列表上的{1}},不属于那里......
提示?
PS:我只能在星期一看到这个,所以今年很开心,伙计们!答案 0 :(得分:1)
使用CASE
有两种不同的方法,请尝试另一种方式。
WHERE CASE
WHEN outsideVar = 9999 THEN CO_SEGMENT LIKE '%'
WHEN outsideVar = 9002 THEN (CO_SEGMENT LIKE '9002' OR CO_SEGMENT LIKE '901[345]')
WHEN outsideVar = 9003 THEN CO_SEGMENT LIKE '901[345]'
WHEN outsideVar = 9004 THEN CO_SEGMENT LIKE '900[56]'
WHEN outsideVar = 9007 THEN CO_SEGMENT LIKE '900[89]'
ELSE CO_SEGMENT LIKE outsideVar
END
答案 1 :(得分:0)
使用CTE map 表而不是CASE来尝试此SQL模式:
;with
map as (
select * from (values
(9999, '%')
,(9001, '9002')
,(9003, '901[345]')
,(9004, '900[56]')
,(9007, '900[89]')
)t(segment pattern)
),
patterns as (
select
data.key
,pattern = coalesce(map.pattern,data.outsideVar)
from dataTable as data
left join map on map.segment = data.outsideVar)
)
select *
from dataTable as data
join patterns on data.CO_SEGMENT like patterns.pattern