sql-server - 在 SQL 中分隔同一列中的项目的最佳方法是什么?
问题描述
例如,我有下面的列。该列由两种类型的代码组成。包含字母的代码称为 HCPC 代码,数字代码称为 CPT 代码。我需要将这两种类型分开,但很难找到这样做的方法。这是原始列:
程序代码 |
---|
G2024 |
99201 |
G0348 |
99204 |
59610 |
4665F |
我基本上需要输出如下:
彩管 | HCPC |
---|---|
99201 | G2024 |
99204 | G0348 |
59610 | 4665F |
提前致谢
解决方案
由于每种类型的代码数量不同,因此如果您只关心那一列,则下面的代码应该可以工作:
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 的值,但绝不会同时具有两者。
推荐阅读
- postgresql - 无法连接到服务器:连接被拒绝(0x0000274D/10061)服务器是否在主机“localhost”上运行
- c# - C# 在 asp.net 核心托管服务使用者中处理具有多个并行任务的 IAsyncEnumerable 项
- vb.net - 使用 For Each 将集合分配给集合数据项
- java - 使用 Kivy 和 Buildozer 创建 Android 应用时 opencv 出现问题:找不到 libpython3.5m.so、libpython3.6m.so、libpython3.7m.so
- java - 如何在 asp.net core 1.0 c#中将字符串(实际上是位图)转换为 IFormFile
- authentication - 如何在使用 CloudFormation 启动 EC2 实例时复制文件并添加动态内容?
- java - 如何监听 Firestore 中文档列表的实时更新?
- amazon-web-services - Amazon Web Services (AWS) 是否支持 GDPR?
- python - 如何在不提供所有字段值的情况下保存 django 模型的对象?
- javascript - 如何使用 Office Js 设置多个单元格属性?