嗨有沒有一種方法來分配case列中的多個列?在case語句中分配多個列?
我試圖從另一列case語句指定兩列數據,
SELECT
[FileName],
CASE
WHEN [FileName] LIKE 'ATE_%' THEN CAST(SUBSTRING([FileName],5,5) + '/' + 'ABTA' AS nvarchar(100))
WHEN [FileName] LIKE '%Adhoc%' THEN CAST([FileName] + ' ' + [SheetName] + '/' + 'FileSheet' AS nvarchar(100))
WHEN [FileName] LIKE 'AdvantageData%' THEN CAST([SheetName] + '/' + 'Sheet' AS nvarchar(100))
END AS ABTA_LookUp
這個工作,但它提出
FileName SheetName/FileSheet
或
SheetName/Sheet
或
89765/ABTA
到ABTALookUp
我想它這些值出在同一個語句如果可能的話即
ABTALookUp = FileName SheetName
ABTASource = FileSheet
ABTALookUp = SheetName
ABTASource = Sheet
ABTALookUp = 89765
ABTASource = ABTA
CASE表達式不工作的方式。請閱讀[CASE表達式的骯髒祕密](http://sqlperformance.com/2014/06/t-sql-queries/dirty-secrets-of-the-case-expression)。 – 2014-09-01 19:20:58
@AaronBertrand在你的文章中,我注意到你使用'StatusLabel = CASE ...'而不是'CASE ... END作爲StatusLabel'。這只是一個偏好,還是有任何其他原因使用前面的語法?我認爲使用'AS'是ANSI的方式,使用'='只是爲了向後兼容。 – jpw 2014-09-01 19:56:28
@jpw這都是主觀的。 ['='是更可讀的方式,恕我直言](http://sqlblog.com/blogs/aaron_bertrand/archive/2012/01/23/bad-habits-to-kick-using-as-instead-of-for -column-aliases.aspx),儘管我的意見並不流行。試圖嚴格遵守ANSI是毫無意義的,特別是如果沒有切換平臺的風險,並且代價是可讀性。雖然在可讀性方面我無所謂,但我確實依賴這種方式(例如,我比'GETDATE()'更喜歡CURRENT_TIMESTAMP',而''更喜歡'!='](http://sqlblog.com/blogs/ aaron_bertrand /存檔/ 2008/03/20 /它使用的-or.aspx))。 – 2014-09-01 20:32:30