Oracle 根据值对列重新排序

Oracle 根据值对列重新排序,oracle,Oracle,是否有任何方法可以根据值对表(或查询)中的列重新排序 例如,在每一行上,FacName应该是第一,NPI-第二,TIN-第三和地址-第四 谢谢大家! 您希望在列之间移动数据这一事实强烈地意味着基础数据模型已损坏,需要进行规范化。修复数据模型比给系统增加另一层复杂性更合适 也就是说,你应该能够做一些 SELECT (CASE WHEN column1 LIKE 'FacilityName%' THEN column1 WHEN column2 LIKE 'Facility

是否有任何方法可以根据值对表(或查询)中的列重新排序

例如,在每一行上,FacName应该是第一,NPI-第二,TIN-第三和地址-第四

谢谢大家!


您希望在列之间移动数据这一事实强烈地意味着基础数据模型已损坏,需要进行规范化。修复数据模型比给系统增加另一层复杂性更合适

也就是说,你应该能够做一些

SELECT (CASE WHEN column1 LIKE 'FacilityName%' THEN column1
             WHEN column2 LIKE 'FacilityName%' THEN column2
             WHEN column3 LIKE 'FacilityName%' THEN column3
             WHEN column4 LIKE 'FacilityName%' THEN column4
             ELSE null
         END) column1,
       (CASE WHEN column1 LIKE 'NPI%' THEN column1
             WHEN column2 LIKE 'NPI%' THEN column2
             WHEN column3 LIKE 'NPI%' THEN column3
             WHEN column4 LIKE 'NPI%' THEN column4
             ELSE null
         END) column2,
       (CASE WHEN column1 LIKE 'TIN%' THEN column1
             WHEN column2 LIKE 'TIN%' THEN column2
             WHEN column3 LIKE 'TIN%' THEN column3
             WHEN column4 LIKE 'TIN%' THEN column4
             ELSE null
         END) column3,
       (CASE WHEN column1 LIKE 'Address%' THEN column1
             WHEN column2 LIKE 'Address%' THEN column2
             WHEN column3 LIKE 'Address%' THEN column3
             WHEN column4 LIKE 'Address%' THEN column4
             ELSE null
         END) column4
  FROM( <<your query>> )
SELECT(当column1像'FacilityName%'时,选择CASE),然后选择column1
当column2像'FacilityName%'时,则column2
当第3列类似于“FacilityName%”时,则第3列
当column4像'FacilityName%'时,则column4
否则无效
(完)第一栏,,
(当第1列类似于“NPI%”时,则为第1列。)
当第2列喜欢“NPI%”时,第2列
当第3列像“NPI%”时,则第3列
当第4列像“NPI%”时,则第4列
否则无效
(完)第二栏,,
(当第1列与“TIN%”相似时,则为第1列)
当第2列像“TIN%”时,则第2列
当第3列像“TIN%”时,则第3列
当第4列像“TIN%”时,则第4列
否则无效
(完)第三栏,,
(如果第1列与“地址%”相似,则为第1列。)
当第2列喜欢“地址%”时,则第2列
当第3列喜欢“地址%”时,则第3列
当第4列喜欢“地址%”时,则第4列
否则无效
(完)第4栏
从()

首先,非常感谢您!!!!我完全同意,这是一个可怕的集合,但这不是真正的数据,这些是列标题。这是自动化中的一个步骤,我正在尝试获取所有可能的字段组合,然后对它们进行插入查询。但你是对的,这真是一团糟,我只是想不出更好的办法(我在看到你的答案之前就选择了答案,所以我把你的选了。可以吗?@lalachka-是的,没关系,没关系。很乐意帮忙。谢谢你提出了一个有趣的问题
select col1, col2, col3, col4 from (
  select * from (
    select 
      n, str, row_number() over (partition by n order by 
      decode(substr(str,1,3),'Fac',1,'NPI',2,'TIN',3,'Add',4)) cn 
    from (
      select * from (select t.*, rownum n from t)
      unpivot (str for cn in (col1 as 0, col2 as 0, col3 as 0, col4 as 0))
    )
  )
  pivot (min(str) for cn in (1 as col1, 2 as col2, 3 as col3, 4 as col4))
)
order by n