2012-10-23 46 views
1
`SELECT * FROM [case] 
WHERE status = '0' 
and date_rec > '01 January 2012' 
and 'ClientFilter' = 
CASE @clientcode 
    WHEN '' THEN 'ClientFilter' 
    ELSE 
CASE WHEN client in 
(SELECT ID COLLATE DATABASE_DEFAULT FROM 
GREEN.dbo.fnSplitter(@clientcode)) THEN 'ClientFilter' END END; ` 

我想爲類似於clientfilter的上述查詢添加額外的篩選器。有誰知道如何做到這一點。舉例如下,但不起作用。SQL與子句動態其中參數

`SELECT * FROM [case] 
WHERE status = '0' 
and date_rec > '01 January 2012' 
and 'ClientFilter' = 
CASE @clientcode 
    WHEN '' THEN 'ClientFilter' 
    ELSE 
CASE WHEN client in 
(SELECT ID COLLATE DATABASE_DEFAULT FROM GREEN.dbo.fnSplitter (@clientcode)) 
THEN 'ClientFilter' END END; 
and 'SchemeFilter' = 
CASE @schemecode WHEN '' THEN 'SchemeFilter' 
ELSE 
CASE WHEN client in 
(SELECT ID COLLATE DATABASE_DEFAULT FROM GREEN.dbo.fnSplitter(@schemecode)) 
THEN 'SchemeFilter' END END; ` 

回答

1

我找到了解決方案。
這樣,可以應用一大堆條件過濾器:

SELECT * FROM [case] 
WHERE status = '0' 
AND date_rec > '01 January 2012' 
AND 'SchemeFilter' = 
CASE @schemecode 
    WHEN '' THEN 'SchemeFilter' 
    ELSE 
    CASE WHEN scheme in (SELECT ID COLLATE DATABASE_DEFAULT FROM GREEN.dbo.fnSplitter (@schemecode)) THEN 'SchemeFilter' END END 
AND 'ClientFilter' = 
CASE @clientcode 
    WHEN '' THEN 'ClientFilter' 
    ELSE 
    CASE WHEN client in (SELECT ID COLLATE DATABASE_DEFAULT FROM GREEN.dbo.fnSplitter(@clientcode)) THEN 'ClientFilter' END END 
AND 'Holderfilter' = 
CASE @holdercode 
    WHEN '' THEN 'Holderfilter' 
    ELSE 
    CASE WHEN holder in (SELECT ID COLLATE DATABASE_DEFAULT FROM GREEN.dbo.fnSplitter (@holdercode)) THEN 'Holderfilter' END END 
AND 'Officefilter' = 
CASE @officecode 
    WHEN '' THEN 'Officefilter' 
    ELSE 
    CASE WHEN [current] in (SELECT ID COLLATE DATABASE_DEFAULT FROM GREEN.dbo.fnSplitter(@officecode)) THEN 'Officefilter' END END