2012-06-04 118 views
0

我有3个变量,这些变量在@path不为NULL时是有条件的,即 @serverName,@analysisDB,@cubeName。因此,我在上述SELECT声明中使用了CASE声明。同样,对于@path不为NULL,@cubename还需要LVL5.L5_CubeName(请参见REPLACE语句)的条件,但它在REPLACE语句和CASE块内变得太复杂了。我怎样写,如果我想要做这样的事情SQL Server 2008中REPLACE语句中的CASE语句?

CASE WHEN @path!='' THEN @cubeName ELSE LVL5.L5_CubeName in the REPLACE statement 
SELECT LVL5.L5_Id,   
     CASE WHEN @path!='' THEN @serverName ELSE LVL5.L5_ServerName END [AnalysisServer],   
     CASE WHEN @path!='' THEN @analysisDB ELSE LVL5.L5_AnalysisDatabase END [AnalysisDatabase],   
     REPLACE(REPLACE(REPLACE(LVL5.L5_MDXQuery,'@@Level1',ISNULL(@lvl1DataVal,'')),  
     '@@Level2',ISNULL(@lvl2DataVal,'')),'@@CubeName',ISNULL(@cubeName,'')) [MDXQuery],   
     LVL5.L5_ReplaceMDX [ReplaceMDX],  
     LVL5.L5_RefreshDate [RefreshDate],  
     LVL5.L5_ReportAttribute [ReportAttribute],  
     LVL5.L5_ReportTitle [ReportTitle]   
    FROM Report_SR_Level5 [LVL5]     
    WHERE L4_ID = @L4_ID ORDER BY LVL5.L5_DisplayOrder 
+0

请格式化你的问题要提出的是可读容易。你可能会觉得这很容易,但我认为让别人明白你想要什么是很困难的。如果你使用了一个简单的例子而不是粘贴你复杂的代码(例如你可能不是LVL5.L5_遍布整个样本) –

+0

是的,我知道但是我意外地点击了帖子按钮,现在它不会让我这么做20分钟前 –

+0

不知道我是否正确理解了您的问题?当你运行这个查询时发生了什么? – Rahul

回答

0

事情是这样的:

CASE WHEN @path is not null or @path != '' 
THEN REPLACE(REPLACE(REPLACE(LVL5.L5_MDXQuery,'@@Level1', 
ISNULL(@lvl1DataVal,'')),'@@Level2',ISNULL(@lvl2DataVal,'')),'@@CubeName', 
ISNULL(@cubeName,'')) [MDXQuery] 
ELSE Somethingelse END cubedata