2017-06-12 34 views
0

我寫結構如下查詢:SQL SELECT壓縮

IF (SELECT 8) = (SELECT 9) 
INSERT INTO Quality_Report VALUES ('USBL', 'IM SL Current Time Period',(SELECT 8),(SELECT 9),'Match',GETDATE()) 

ELSE INSERT INTO Quality_Report VALUES ('USBL', 'IM SL Current Time Period',(SELECT 8),(SELECT 9),'Not Matched',GETDATE()) 

的SELECT「8」和「9」將返回數值(如下圖所示)SELECT語句來代替。

SELECT 
CASE when Sum(AVG_DLY_SLS_LST_35_DYS) =0 then 0 else 
Sum(INVN_DOL)/Sum(AVG_DLY_SLS_LST_35_DYS)end as [IM DSO Current Time Period] 
FROM [Mars_Bars_RAW].DBO.[LND_ITEMDETAILS] 
LEFT JOIN [Mars_Bars_RAW].DBO.[LND_OpcoMaster]  ON OpCo_NBR = Opco 
     WHERE FISC_WEEK = '37' 
     AND FY17_Market = 'Southeast' 

當我用實際查詢替換我的兩個SELECT語句,我得到這個錯誤,雖然:消息116,級別16,狀態1,第43行 只有一個表達式可以在選擇列表中指定當子查詢不與EXISTS一起引入。

任何理由我不能這樣做?適用於虛擬SELECT 8/9s。

感謝,

+0

Microsoft SQL(T-SQL) –

回答

2

你告訴我們只有一個選擇stetement,它的另外一個,給你一個錯誤。 試試這個,你會發現,它不產生任何錯誤:

if (SELECT 
    CASE when Sum(AVG_DLY_SLS_LST_35_DYS) =0 then 0 else 
    Sum(INVN_DOL)/Sum(AVG_DLY_SLS_LST_35_DYS)end as [IM DSO Current Time Period] 
    FROM [Mars_Bars_RAW].DBO.[LND_ITEMDETAILS] 
    LEFT JOIN [Mars_Bars_RAW].DBO.[LND_OpcoMaster]  ON OpCo_NBR = Opco 
      WHERE FISC_WEEK = '37' 
      AND FY17_Market = 'Southeast') 
      = 
    (SELECT 
    CASE when Sum(AVG_DLY_SLS_LST_35_DYS) =0 then 0 else 
    Sum(INVN_DOL)/Sum(AVG_DLY_SLS_LST_35_DYS)end as [IM DSO Current Time Period] 
    FROM [Mars_Bars_RAW].DBO.[LND_ITEMDETAILS] 
    LEFT JOIN [Mars_Bars_RAW].DBO.[LND_OpcoMaster]  ON OpCo_NBR = Opco 
      WHERE FISC_WEEK = '37' 
      AND FY17_Market = 'Southeast') 
    print 'this works' 

在你的另一個選擇語句你(在我的例子8,9)有一個以上的場,這是導致該錯誤:

if (SELECT 
     8, 9) 
       = 
     (SELECT 
     CASE when Sum(AVG_DLY_SLS_LST_35_DYS) =0 then 0 else 
     Sum(INVN_DOL)/Sum(AVG_DLY_SLS_LST_35_DYS)end as [IM DSO Current Time Period] 
     FROM [Mars_Bars_RAW].DBO.[LND_ITEMDETAILS] 
     LEFT JOIN [Mars_Bars_RAW].DBO.[LND_OpcoMaster]  ON OpCo_NBR = Opco 
       WHERE FISC_WEEK = '37' 
       AND FY17_Market = 'Southeast') 
     print 'this works'