Sql 根据类别在另一个表上的较低和较高值范围内从一个表中查找值

Sql 根据类别在另一个表上的较低和较高值范围内从一个表中查找值,sql,Sql,你好 我有三个表T1 Fact、T2 Dim Cat和T3 Dim Range,我想根据类别T2从T1中查找一个值(根据类别有两列可以使用),T3在T3上有一个范围,该范围具有一个较低的值和一个较高的值,并在T1上填充一个唯一ID e、 g 表格设计: 如何根据类别和我的输出列(范围ID)所示的两个值来制定执行查找的语法,如下所示: 向您致以亲切的问候并提前向您表示感谢。您好,比较空值很难 在Oracle中,这将起作用。我不知道您使用的是什么SQL,但可能您需要对其进行一些更改: 这包括t1

你好

我有三个表T1 Fact、T2 Dim Cat和T3 Dim Range,我想根据类别T2从T1中查找一个值(根据类别有两列可以使用),T3在T3上有一个范围,该范围具有一个较低的值和一个较高的值,并在T1上填充一个唯一ID

e、 g

表格设计:

如何根据类别和我的输出列(范围ID)所示的两个值来制定执行查找的语法,如下所示:


向您致以亲切的问候并提前向您表示感谢。

您好,比较空值很难

在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\u value、t3.range\u lower和t3.range\u 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
    OR t1.result_text = t3.range_name
    );

您还可以将CASE添加到where子句中

提示:
join
,但不相等。您使用的是哪种DBMS?另外:感谢您的回复SQL Aginity Netezza感谢您在查看Cat B时的回复它应该查看t1结果文本和t3范围名称感谢您使用您的脚本我能够解决问题请参见下文,而不是在where子句中执行此操作我在连接中执行了此操作:FROM CDW_PROD.INFAETL.FCT_T1S a连接CDW_PROD.INFAETL.DIM_T2 b on(a.TEST_METHOD_ID=b.TEST_METHOD_ID)左连接CDW_PROD.ADMIN.DIM_T3 c on(b.TEST_CATEGORY=c.TEST_CATEGORY)和b.TEST_CATEGORY in('Cat1','Cat2')a.RESULT_数值介于c.LOW_值和c.HIGH_值之间当b.TEST_CATEGORY='CATEGORY='CATEGORY='Cat3'时,a.RESULT_一致=结果范围显示_case其他假结束
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
    );