2017-06-12 4 views
0

ich eine Abfrage mit der folgenden Struktur zu schreiben:SQL SELECT Compression

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()) 

Die SELECT „8“ und „9“ wird mit SELECT-Anweisungen ersetzt werden, den numerischen Wert zurückgeben (wie unten).

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' 

Wenn ich meine beide SELECT-Anweisungen mit den tatsächlichen Anfragen ersetzen, bekomme ich diesen Fehler aber: Msg 116, Ebene 16, Status 1, Zeile 43 nur ein Ausdruck in der Auswahlliste werden kann angegeben werden, wenn die Unterabfrage wird nicht mit EXISTS eingeführt.

Irgendein Grund kann ich das nicht tun? Funktioniert gut mit dem Dummy SELECT 8/9s.

Danke,

+0

Microsoft SQL (T-SQL) –

Antwort

2

Sie zeigte uns nur ein wählen stetement und es ist eine andere, die Sie einen Fehler gibt. Versuchen Sie diese und Sie werden feststellen, dass es keine Fehler produziert:

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' 

In Ihrer anderen select-Anweisung Sie mehr als ein Feld hat (8,9 in meinem Beispiel), das ist verursacht den Fehler:

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'