【问题标题】:Hierarchical comparison层次比较
【发布时间】:2021-08-15 16:29:00
【问题描述】:

我在大约 50 列的数据集中有以下两列:

One Two
1B   2A
3D   4C
3D   3D

...

值从 1 到 5(从最高到最低)和从 A 到 F(从最高到最低)。 我需要计算有多少观察值被降级了 0.5、1、2、3 ......降级是指 One 的值低于 2。 例如:

One Two
1B 2A

我知道一比二小 1。 我目前正在为每个人使用一个案例:

Select * ,
Case when one like ‘1%’ and two like ‘2%’  then ...

from my_table

但是它非常耗时。 你知道我怎样才能更简单地做到这一点吗?

【问题讨论】:

  • 不清楚您如何计算部分降级。似乎您希望将第一列和第二列中的每一列转换为某个数值或一对值(可能在 CTE 或派生表中)并做一些简单的数学运算。

标签: sql teradata-sql-assistant teradatasql


【解决方案1】:

你不能只使用字符串比较吗?

(case where one < two then 'lower' else 'not lower' end)

或者,如果您只想比较第一个字符(数字):

(case when left(one, 1) < left(two, 1) then 'lower' else 'not lower' end)

如果您特别希望该值小于“1”,那么:

(case when cast(left(one, 1) as int) = cast(left(two, 1) as int) - 1
      then 'lower' else 'not lower'
 end)

【讨论】:

  • 第一种情况似乎不起作用。我有 4 合 1 和 2C 合 2 并且返回率不低。我还要测试其他情况。
  • @Val 。 . .除非您使用非常奇怪的排序规则,'4' &gt; '2'。是否可以将“隐藏”字符作为第一个字符,比如空格?
  • 是的,我知道。这很奇怪。不,在他的第一个字符之前没有空格。格式为 X(4),输入 Cf
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
相关资源
最近更新 更多