我試圖採取一個現有的列和解析每一行字符串中的某些單詞,即工作表,頁面,卡片,並基於該單詞(只有一個這樣的單詞中的一個實例在一行中)填充同一個表中的新列與值。如果沒有找到任何這些單詞,請將列B留空。根據SQL2005中列A中的值設置列B中的值?
I.E. A列中包含單詞「表」,填寫列B以字母「S」
所以表會是這樣的:
Column A Column B
Sheet S
Page P
Card C
任何幫助,將不勝感激!
我試圖採取一個現有的列和解析每一行字符串中的某些單詞,即工作表,頁面,卡片,並基於該單詞(只有一個這樣的單詞中的一個實例在一行中)填充同一個表中的新列與值。如果沒有找到任何這些單詞,請將列B留空。根據SQL2005中列A中的值設置列B中的值?
I.E. A列中包含單詞「表」,填寫列B以字母「S」
所以表會是這樣的:
Column A Column B
Sheet S
Page P
Card C
任何幫助,將不勝感激!
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
update myTable
set columnB = substring(columnA, 1, 1)
如果你希望它是始終可以更改子部分爲大寫:上(子(columnA,1,1)) – 2011-03-03 20:08:02
它不解決這個問題,他只希望在工作表上,頁面,卡片值則爲空。這只是從A到B的第一個字符。 – 2011-03-03 20:10:05
;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 + '%'
也許會出現邊緣情況,但如果此前包含的值不再有效,則不會將列B清空。 – 2011-03-03 20:15:31
@Joe - 這不是規範!問題是「讓列B留空」,這意味着它當前不包含任何非空白項目。 – 2011-03-03 20:18:51
你說得對,而且,正如我所說的,充其量,這是一個需要考慮的邊緣案例。 – 2011-03-03 20:21:59
感謝喬,這完美的作品。 – Brian 2011-03-03 22:40:27