2017-03-24 137 views
0

所以我声明了一个变量@Location。我想从基于变量的表中的1列返回特定数据。子语句在case语句中

就像这个...

IF @location =“宾夕法尼亚”,然后返回在此列,与“123”开头 各个领域的IF @位置=“纽约,然后在此列返回领域以“345” 开始。这是我至今写的,不知道如果我正确地处理这个...

SELECT 

     CASE WHEN @Site = 'PEnnsylvania' THEN 
(
    SELECT A.so_prod_key 
    FROM so_prod_tbl A 
    WHERE A.so_prod_key LIKE '110%' 
) 


WHEN @Site = 'New York' THEN 
    ( 
    SELECT B.so_prod_key 
    FROM so_prod_tbl B 
    WHERE B.so_prod_key LIKE '112%' 
) 


    WHEN @Site = 'New Jersey' THEN 
    ( 
     SELECT C.so_prod_key 
     FROM so_prod_tbl C 
     WHERE C.so_prod_key LIKE '111%' 
    ) 
    ELSE ' ' END AS 'Products' 

,一点点指引,将不胜感激!

+2

无论是MySQL还是SQL-server,都不能同时存在。我删除了冲突的标签,请在 – JohnHC

+0

中添加正确的标签。样本数据和期望的结果确实有帮助。 –

回答

0

那样的话表达可以像

CASE WHEN @Site = 'PEnnsylvania' AND A.so_prod_key LIKE '110%' 
THEN A.so_prod_key ELSE NULL END As col1 
0

改变,我认为这是你想要的东西:

SELECT A.so_prod_key 
FROM so_prod_tbl A 
WHERE (@Site = 'Pennsylvania' and A.so_prod_key LIKE '110%') or 
     (@Site = 'New York' and A.so_prod_key LIKE '112%') or 
     (@Site = 'New Jersey' and A.so_prod_key LIKE '111%') 
0

我想你想要的是类似于以下,将case语句中WHERE子句代替:

SELECT A.so_prod_key 

FROM so_prod_tbl A 

WHERE A.so_prod_key LIKE ( 

          CASE 
            WHEN @Site = ‘Pennsylvania’ THEN ‘110%’ 
            WHEN @Site = ‘New York’ THEN ‘112%’ 
            —- etc. 
          END 
         ) 
;