2015-11-18 25 views
0

我有一個SQL存儲過程出現問題。我知道這很可能是WHERE子句中的SELECT語句返回多個值。我將WHERE註釋掉,並返回結果。子查詢返回的值超過1。我的WHERE子句需要刪除SELECT語句

我的問題是如何修改語句,以便我仍然可以過濾這些條件?

存儲過程的代碼:

SELECT 
    REPORT_SPOOL.ID, 
    REPORT_SPOOL.REPORT_SPOOL_TYPE_ID, 
    REPORT_SPOOL.FUND_ID, 
    REPORT_SPOOL.PERF_ENTITY_ID, 
    REPORT_SPOOL.REPORT_GUID, 
    REPORT_SPOOL.REPORT_TEMPLATE_GUID, 
    PERF_ENTITY.CODE AS PERF_ENTITY_CODE, 
    PERF_ENTITY.NAME AS PERF_ENTITY_NAME, 
    FUND.CODE AS FUND_CODE, 
    FUND.NAME AS FUND_NAME, 
    REPORT.CODE AS REPORT_CODE, 
    REPORT.NAME AS REPORT_NAME, 
    REPORT_TEMPLATE.CODE AS REPORT_TEMPLATE_CODE, 
    REPORT_TEMPLATE.NAME AS REPORT_TEMPLATE_NAME, 
    FUND.ACCOUNTING_START AS START_DATE, 
    FUND.ACCOUNTING_END AS END_DATE 
FROM 
    PERF_ENTITY 
    RIGHT OUTER JOIN 
     REPORT 
     INNER JOIN 
      REPORT_SPOOL 
      ON REPORT.GUID = REPORT_SPOOL.REPORT_GUID 
     INNER JOIN 
      REPORT_TEMPLATE 
      ON REPORT_SPOOL.REPORT_TEMPLATE_GUID = REPORT_TEMPLATE.GUID 
    ON PERF_ENTITY.ID = REPORT_SPOOL.PERF_ENTITY_ID 
    LEFT OUTER JOIN 
    FUND 
    ON REPORT_SPOOL.FUND_ID = FUND.ID 
    WHERE 
    (END_DATE IS NULL OR END_DATE > @REPORT_DATE) 
    AND 
    REPORT_SPOOL.FUND_ID = (SELECT FUND_ID FROM FUND_HLD WHERE [DATE] = @REPORT_DATE) 
    AND 
    REPORT_SPOOL.FUND_ID = (SELECT FUND_ID FROM FUND_TRD_LINE_VIEW WHERE [DATE] >= (SELECT DATEFROMPARTS(YEAR(@REPORT_DATE),MONTH(@REPORT_DATE),1)) AND [DATE] <= @REPORT_DATE) 

那些過去2個選擇是問題

+2

嘗試改變等於(* = *)到* IN * –

+0

如果'IN'不是正確的解決方案,那麼當這些子查詢返回多行時,您需要告訴我們(和SQL Server)您的規則是什麼。 –

回答

2

在子查詢替換=in

REPORT_SPOOL.FUND_ID in (SELECT FUND_ID FROM FUND_HLD WHERE [DATE] = @REPORT_DATE) 
    AND 
    REPORT_SPOOL.FUND_ID in (SELECT FUND_ID FROM FUND_TRD_LINE_VIEW WHERE [DATE] >= (SELECT DATEFROMPARTS(YEAR(@REPORT_DATE),MONTH(@REPORT_DATE),1)) AND [DATE] <= @REPORT_DATE)