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