Sql 层次比较
我在一个大约有50列的数据集中有以下两列:Sql 层次比较,sql,teradata-sql-assistant,teradatasql,Sql,Teradata Sql Assistant,Teradatasql,我在一个大约有50列的数据集中有以下两列: One Two 1B 2A 3D 4C 3D 3D ... 值从1到5(从最高到最低)以及从A到F(从最高到最低)。 我需要计算有多少观测值被降级了0.5,1,2,3。。。对于降级,我的意思是1的值小于2。 例如: One Two 1B 2A 我有一个比2乘1低。 我目前正在使用一个案例,其中每个案例: Select * , Case when one like ‘1%’ and two like ‘2%’ then ... fr
One Two
1B 2A
3D 4C
3D 3D
...
值从1到5(从最高到最低)以及从A到F(从最高到最低)。
我需要计算有多少观测值被降级了0.5,1,2,3。。。对于降级,我的意思是1的值小于2。
例如:
One Two
1B 2A
我有一个比2乘1低。
我目前正在使用一个案例,其中每个案例:
Select * ,
Case when one like ‘1%’ and two like ‘2%’ then ...
from my_table
然而,这是非常耗时的。
你知道我怎样做才能更简单吗?你就不能用字符串比较吗
(case where one < two then 'lower' else 'not lower' end)
第一种情况似乎不起作用。我有四分之一和二分之二,它返回不低于。我还要测试其他案例。@Val。除非您使用的是非常奇怪的排序规则,
'4'>'2'
。第一个字符会不会有一个“隐藏”字符,比如空格?是的,我知道。这很奇怪。不,在第一个字符之前没有空格。格式为X(4),键入CFL不清楚如何计算分数降级。似乎您希望将第1列和第2列中的每一列转换为某个数值或一对值(可能在CTE或派生表中),并进行一些简单的数学运算。
(case when left(one, 1) < left(two, 1) then 'lower' else 'not lower' end)
(case when cast(left(one, 1) as int) = cast(left(two, 1) as int) - 1
then 'lower' else 'not lower'
end)