2011-03-03 104 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

相關問題