将一列分成两列

Separate One Column Into Two Columns

我正在尝试将包含血型的一列分成两列。

例如,如果现有血型列中我的值为 ABNG,我想将其分成两个新列并插入值:ABNeg

不确定 case 语句是否会处理这个问题,但我尝试了不同的变体,但找不到解决方案。

这是现有数据的样子,有 9 种血型(包括 Unknown 也不错),其中混有一些不良数据(' '、0 和 B)。

在没有完全掌握如何处理这个问题的情况下,我认为可以创建一个视图,将信息拆分到新的列中。

这就是我希望的最终结果:

这可能吗?

鉴于血型数量有限(希望您的数据格式正确),您可以执行以下操作:

SELECT Type = CASE WHEN col LIKE 'AB%' THEN 'AB' /*gets AB*/
ELSE LEFT(col, 1)  /*gets o,a,or b*/ END, 
Valence = RIGHT(col, 3) /*gets pos or neg*/

您可以使用 CASE 语句来检查条件,并使用 wildcard 字符来对源列进行字符串过滤。

SELECT PBTYPE [Existing Blood Type],
CASE 
    WHEN PBTYPE LIKE 'O%'  THEN 'O'
    WHEN LEFT(PBTYPE,1)='A' AND SUBSTRING(PBTYPE,2,1)<>'B' THEN 'A'
    WHEN LEFT(PBTYPE,2)='AB' AND SUBSTRING(PBTYPE,2,1)='B' THEN 'AB'
    WHEN PBTYPE LIKE 'B%'  THEN 'B'
    WHEN PBTYPE = 'UNK'    THEN 'UNK'
END [Blood Type],
CASE 
    WHEN PBTYPE LIKE '%POS' OR PBTYPE LIKE '%PS' THEN 'POS' 
    WHEN PBTYPE LIKE '%NEG' OR PBTYPE LIKE '%NG' THEN 'NEG' 
    WHEN PBTYPE LIKE '%B' THEN 'B' 
    WHEN PBTYPE LIKE '%UNK' THEN 'UNK'
END [Rho]
FROM YOURTABLE
WHERE PBTYPE <> '' AND PBTYPE <> '0'