Sql 层次比较

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

我在一个大约有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 ...

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)