我正在尝试将包含血型的一列分成两列。
例如,如果现有血型列中的值为ABNG
,我想将其分为两个新列并插入值:AB
和Neg
。
不确定case语句是否会处理此问题,但我尝试了不同的变体,但找不到解决方案。
以下是现有数据的样子,有9种血型(包括未知,很好),其中混合了一些不良数据('',0和B)。
如果没有最好地掌握如何处理这个问题,我认为可以创建一个可以将信息拆分成新列的视图。
这就是我希望最终结果:
这可能吗?
答案 0 :(得分:0)
鉴于血型数量有限(并且希望您的数据格式良好),您可以执行以下操作:
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*/
答案 1 :(得分:0)
您可以使用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'