首页 > 解决方案 > 在 SQL 中分隔同一列中的项目的最佳方法是什么?

问题描述

例如,我有下面的列。该列由两种类型的代码组成。包含字母的代码称为 HCPC 代码,数字代码称为 CPT 代码。我需要将这两种类型分开,但很难找到这样做的方法。这是原始列​​:

程序代码
G2024
99201
G0348
99204
59610
4665F

我基本上需要输出如下:

彩管 HCPC
99201 G2024
99204 G0348
59610 4665F

提前致谢

标签: sql-server

解决方案


由于每种类型的代码数量不同,因此如果您只关心那一列,则下面的代码应该可以工作:

SELECT
  c1.ProcedureCode CPT, c2.ProcedureCode HCPC
FROM
  (
    SELECT
          mt.ProcedureCode, ROW_NUMBER() OVER (ORDER BY(SELECT NULL)) rowNo
    FROM  dbo.myTable AS mt
    WHERE mt.ProcedureCode NOT LIKE '%[A-Za-z]%'
  )   c1
  FULL OUTER JOIN
  (
  SELECT
        mt.ProcedureCode, ROW_NUMBER() OVER (ORDER BY(SELECT NULL)) rowNo
  FROM  dbo.myTable AS mt
  WHERE mt.ProcedureCode LIKE '%[A-Za-z]%'
  ) c2 ON c2.rowNo=c1.rowNo;

如果您需要保留表中的其他列,则更像这样:

SELECT <other columns>, 
    CASE WHEN ProcedureCode LIKE '%[A-Za-z]%' THEN ProcedureCode END HCPC, 
    CASE WHEN ProcedureCode NOT LIKE '%[A-Za-z]%' THEN ProcedureCode END CPT
FROM dbo.myTable

这将保留其他列,每一行要么具有 HCPC 的值,要么具有 CPT 的值,但绝不会同时具有两者。


推荐阅读