2015-07-20 163 views
0

我需要從Case語句內的SQL Select語句獲取供應商ID。一旦我把A.SUPPLIER_ID選擇語句,我得到一個錯誤。這個怎麼做?SQL Case語句錯誤無法選擇多個列

Select 
     CASE 
     WHEN TYPE = 1 THEN 
      (
       SELECT A.name 
       from BIZZXE_V2_SCH.SUPPLIERS A 
       where A.SUPPLIER_ID = 30 
      ) 
     ELSE 
      (
      SELECT A.name 
      from BIZZXE_V2_SCH.STOCK_SUPPLIER A 
      where A.SUPPLIER_ID = 31 
     ) 
     END name 
from DUAL; 

回答

1

您無法將完整的查詢放入case語句中。但這應該工作

SELECT name 
from BIZZXE_V2_SCH.SUPPLIERS 
where SUPPLIER_ID = 30 and TYPE = 1 
union all 
SELECT name 
from BIZZXE_V2_SCH.STOCK_SUPPLIER 
where SUPPLIER_ID = 31 and TYPE <> 1 
0

你應該能夠在你的WHERE語句中處理這個,就像這樣。

SELECT A.name 
FROM BIZZXE_V2_SCH.STOCK_SUPPLIER A 
WHERE (A.SUPPLIER_ID = 30 AND TYPE = 1) OR 
A.SUPPLIER_ID = 31 
0

使用IF/ELSE聲明

DECLARE @type NUMBER; 
SELECT TYPE INTO @type FROM DUAL; -- Make sure it always returns one row 

IF @type = 1 THEN 
    SELECT A.name 
    FROM BIZZXE_V2_SCH.SUPPLIERS A 
    WHERE A.SUPPLIER_ID = 30; 
ELSE 
    SELECT A.name 
    FROM BIZZXE_V2_SCH.STOCK_SUPPLIER A 
    WHERE A.SUPPLIER_ID = 31 
END IF;