美好的一天,
我有3个表T1 Fact,T2 Dim Cat和T3 Dim Range,并希望从T1中查找一个值,具体取决于类别T2(根据类别可以使用2列),T3有,a范围在T3上具有较低和较高值,并在T1上填充唯一ID。
e.g
表设计:
如何根据类别以及输出列(范围ID)如下所示的两个值之间来制定语法以进行查找:
亲切的问候,并提前感谢你。
答案 0 :(得分:0)
你好比较NULL会让它变得困难。
在Oracle中,这将起作用。我不知道你在使用什么SQL,但也许你必须稍微改变一下:
这包括t1.id = 2的记录:
SELECT t1.id
, t1.code
, t1.result_value
, t1.result_text
, t3.id as range_id
FROM t1
, t2
, t3
WHERE t1.code = t2.code
AND t2.category = t3.category
AND ( t1.result_value BETWEEN t3.range_lower AND t3.range_higher
OR NVL(t1.result_value,999) = NVL(t3.range_lower,999)
);
这是列t1.result_value,t3.range_lower和t3.range_higher(给出2条记录)中的值:
SELECT t1.id
, t1.code
, t1.result_value
, t1.result_text
, t3.id as range_id
FROM t1
, t2
, t3
WHERE t1.code = t2.code
AND t2.category = t3.category
AND t1.result_value BETWEEN t3.range_lower AND t3.range_higher
;
发表评论后:
SELECT t1.id
, t1.code
, t1.result_value
, t1.result_text
, t3.id as range_id
FROM t1
, t2
, t3
WHERE t1.code = t2.code
AND t2.category = t3.category
AND ( t1.result_value BETWEEN t3.range_lower AND t3.range_higher
OR t1.result_text = t3.range_name
);
您还可以将CASE添加到where子句中。