首页 > 解决方案 > Oracle SQL 列显示未对齐

问题描述

我有下表(C1、C2 和 C3 列),并希望根据 C1、C2、C3 列的未对齐情况生成 C4 列。有没有办法以可扩展的方式获得它(以防我将来需要为 n 列执行此操作)而不需要逐个场景的情况?

C1 C2 C3 C4
A1 A1 无效的 MISMATCH_C3
A2 A2 A2 正确的
无效的 无效的 无效的 空值
A4 A1 A3 MISMATCH_ALL
A5 A1 87 MISMATCH_ALL

标签: sqloracle

解决方案


你可以使用一个巨大的case表达。像这样的东西:

(case when c1 <> c2 and c2 <> c3 and c3 <> c1
      then 'MISMATCH_ALL'
      when c1 is null and c2 is null and c3 is null
      then 'NULLS'
      when c1 = c2 and c2 = c3
      then 'CORRECT'
      when c1 = c2
      then 'MISMATCH_C3'
      when c1 = c3
      then 'MISMATCH_C2'
      when c2 = c3
      then 'MISMATCH_C1'
      else 'Other -- probably 2 NULLs'
 end)

如果将数据存储在列中,则没有“可扩展”的方式来执行此操作。听起来这些数据应该存储在行而不是中。如果是这种情况,那么您可以对聚合做一些事情。

数据应存储为:

ENTITY_ID     colnum       value
    1            1          'A1'
    1            2          'A1'
    1            3          NULL
    2            1          'A2'
    . . .

然后添加新的“列”将是微不足道的。您可以调整逻辑以返回您想要的信息。


推荐阅读