嗨有没有一种方法来分配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