"cased" where, multiple values for one 当
"cased" where, multiple values for one when
抱歉,如果标题很奇怪,我想不出更好的标题来解释情况。 "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
我的想法是,我有一个产品列表,以及一个将产品分组的细分列表。我的问题是某些细分市场,因为我需要他们列出来自 "like-conflicted" 个细分市场的产品。
从上面的例子来看,细分市场 9001 包含细分市场 9002 和 9003 - 但 9003 是 'fake segment',他包含细分市场 9013 到 9015。我不能输入 90[01][2345]
,因为它会包含产品来自列表中的段 9005
,不属于那里...
提示?
PS:我只能在星期一看到这个,祝大家新年快乐!
尝试使用 CTE map table 而不是 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
有两种不同的使用方式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
抱歉,如果标题很奇怪,我想不出更好的标题来解释情况。 "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
我的想法是,我有一个产品列表,以及一个将产品分组的细分列表。我的问题是某些细分市场,因为我需要他们列出来自 "like-conflicted" 个细分市场的产品。
从上面的例子来看,细分市场 9001 包含细分市场 9002 和 9003 - 但 9003 是 'fake segment',他包含细分市场 9013 到 9015。我不能输入 90[01][2345]
,因为它会包含产品来自列表中的段 9005
,不属于那里...
提示?
PS:我只能在星期一看到这个,祝大家新年快乐!
尝试使用 CTE map table 而不是 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
有两种不同的使用方式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