从依赖于类别

时间:2016-03-30 11:45:19

标签: sql

美好的一天,

我有3个表T1 Fact,T2 Dim Cat和T3 Dim Range,并希望从T1中查找一个值,具体取决于类别T2(根据类别可以使用2列),T3有,a范围在T3上具有较低和较高值,并在T1上填充唯一ID。

e.g

表设计:

enter image description here

如何根据类别以及输出列(范围ID)如下所示的两个值之间来制定语法以进行查找:

enter image description here

亲切的问候,并提前感谢你。

1 个答案:

答案 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子句中。