2011-03-03 88 views
2

我试图采取一个现有的列和解析每一行字符串中的某些单词,即工作表,页面,卡片,并基于该单词(只有一个这样的单词中的一个实例在一行中)填充同一个表中的新列与值。如果没有找到任何这些单词,请将列B留空。根据SQL2005中列A中的值设置列B中的值?

I.E. A列中包含单词“表”,填写列B以字母“S”

所以表会是这样的:

Column A Column B 
Sheet  S 
Page   P 
Card   C 

任何帮助,将不胜感激!

回答

1
UPDATE YourTable 
    SET ColumnB = CASE WHEN ColumnA LIKE '%Sheet%' THEN 'S' 
         WHEN ColumnA LIKE '%Page%' THEN 'P' 
         WHEN ColumnA LIKE '%Card%' THEN 'C' 
         ELSE NULL /* or '' if you prefer */ 
        END 
+0

感谢乔,这完美的作品。 – Brian 2011-03-03 22:40:27

-1
update myTable 
set columnB = substring(columnA, 1, 1) 
+0

如果你希望它是始终可以更改子部分为大写:上(子(columnA,1,1)) – 2011-03-03 20:08:02

+0

它不解决这个问题,他只希望在工作表上,页面,卡片值则为空。这只是从A到B的第一个字符。 – 2011-03-03 20:10:05

0
;WITH mappings (ColumnA, ColumnB) AS 
(
SELECT 'Sheet','S' UNION ALL 
SELECT 'Page','P' UNION ALL 
SELECT 'Card','C' 
) 
UPDATE y 
SET y.ColumnB= m.ColumnB 
FROM YourTable y 
JOIN mappings m ON y.ColumnA LIKE '%' + m.ColumnA + '%' 
+0

也许会出现边缘情况,但如果此前包含的值不再有效,则不会将列B清空。 – 2011-03-03 20:15:31

+0

@Joe - 这不是规范!问题是“让列B留空”,这意味着它当前不包含任何非空白项目。 – 2011-03-03 20:18:51

+1

你说得对,而且,正如我所说的,充其量,这是一个需要考虑的边缘案例。 – 2011-03-03 20:21:59

相关问题