2016-04-20 12 views
-5

一つだけの式を選択して指定することができますメッセージ116、レベル16、状態1

メッセージ116、レベル16、状態1、プロシージャopenclosebycat、ライン18
この問題を修正する方法を私を助けてくださいサブクエリがEXISTSで導入されていない のときにリストします。

メッセージレベル116、状態1、プロシージャーopenclosebycat、行20
EXISTSでサブクエリーが導入されていない場合は、選択リストで1つの式しか指定できません。

マイコード:

select distinct 
    (SELECT COUNT(*) 
    FROM dbo.PROBS 
    WHERE (STATUS LIKE 'closed') 
     AND (OPEN_TIME >= @DateFrom) 
     AND (CLOSE_TIME <= @DateTo)) AS closen, 
    (SELECT NUMBER, STATUS, ID 
    FROM dbo.PROBS 
    WHERE (STATUS LIKE 'closed') 
     AND (OPEN_TIME >= @DateFrom) 
     AND (CLOSE_TIME <= @DateTo)) AS closedet, 
    (SELECT NUMBER, STATUS, ID 
    FROM dbo.PROBS 
    WHERE (STATUS LIKE 'open') 
    AND (OPEN_TIME >= @DateFrom) 
    AND (CLOSE_TIME <= @DateTo)) AS opendet, 
    (SELECT COUNT(*) 
    FROM dbo.PROBS 
    WHERE (STATUS = 'closed') 
    AND (CATEGORY = 'problem') 
    AND (OPEN_TIME >= @DateFrom) 
    AND (CLOSE_TIME <= @DateTo)) AS closeporb, 
(SELECT COUNT(*) 
    FROM dbo.PROBS 
    WHERE (STATUS = 'closed') 
    AND (CATEGORY = 'request for information') 
    AND (OPEN_TIME >= @DateFrom) 
    AND (CLOSE_TIME <= @DateTo)) AS closereinfo, 
(SELECT COUNT(*) 
    FROM dbo.PROBS 
    WHERE (STATUS = 'closed') 
    AND (CATEGORY = 'incident') 
    AND (OPEN_TIME >= @DateFrom) 
    AND (CLOSE_TIME <= @DateTo)) AS closeincid, 
(SELECT COUNT(*) 
    FROM dbo.PROBS 
    WHERE (STATUS = 'closed') 
    AND (CATEGORY = 'complaint') 
    AND (OPEN_TIME >= @DateFrom) 
    AND (CLOSE_TIME <= @DateTo)) AS closecomp, 
(SELECT COUNT(*) 
    FROM dbo.PROBS 
    WHERE (STATUS = 'open') 
    AND (CATEGORY = 'problem') 
    AND (OPEN_TIME >= @DateFrom) 
    AND (CLOSE_TIME <= @DateTo)) AS openporb, 
(SELECT COUNT(*) 
    FROM dbo.PROBS 
    WHERE (STATUS = 'open') 
    AND (CATEGORY = 'request for information') 
    AND (OPEN_TIME >= @DateFrom) 
    AND (CLOSE_TIME <= @DateTo)) AS openreinfo, 
(SELECT COUNT(*) 
    FROM dbo.PROBS 
    WHERE (STATUS = 'open') 
    AND (CATEGORY = 'incident') 
    AND (OPEN_TIME >= @DateFrom) 
    AND (CLOSE_TIME <= @DateTo)) AS openincid, 
(SELECT COUNT(*) 
    FROM dbo.PROBS 
    WHERE (STATUS = 'open') 
    AND (CATEGORY = 'complaint') 
    AND (OPEN_TIME >= @DateFrom) 
    AND (CLOSE_TIME <= @DateTo)) AS opencomp, 
(SELECT COUNT(*) 
    FROM dbo.PROBS 
    WHERE (STATUS LIKE 'open') 
    AND (OPEN_TIME >= @DateFrom) 
    AND (CLOSE_TIME <= @DateTo)) AS openn 
FROM 
    dbo.PROBS 
+0

あなたは完全に質問と問題に貼り付けられませんopenclosebycat'手順を '持っているように見えますまた欠落している 'EXISTS'キーワードと関連しています。 – Fka

+0

このコードをすべて関連するCASE文で置き換える必要があります。 select文でこれらのサブクエリをすべて実行する理由はありません。ここでの特定の問題は、各サブ選択が1つの結果のみを返し、残りの3つは3(NUMBER、STATUS、ID)を返すことです。 –

答えて

2

SELECTのサブクエリは1つの属性のみを選択することができます。私はあなたがやろうとしているかわからないんだけど、あなたのような何かに再書き込みする必要があります:

SELECT NUMBER 
,  STATUS 
,  ID 
,  SUM(CASE 
        WHEN STATUS like 'closed' and OPEN_TIME >= @DateFrom and CLOSE_TIME <= @DateTo 
        THEN 1 
        ELSE 0 
      END) as closen 
,  {same for the other counts} 
FROM  dbo.PROBS 
GROUP BY NUMBER 
,  STATUS 
,  ID 
関連する問題