将一列分成两列

时间:2015-02-27 21:34:10

标签: sql-server-2008 case

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

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

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

以下是现有数据的样子,有9种血型(包括未知,很好),其中混合了一些不良数据('',0和B)。

Blood Types

如果没有最好地掌握如何处理这个问题,我认为可以创建一个可以将信息拆分成新列的视图。

这就是我希望最终结果:

Desired Results

这可能吗?

2 个答案:

答案 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'