2017-07-11 16 views
0

case文のincidentdateがgroup byまたはaggregate関数の一部ではないため、このSQLは失敗しています。私が事故でグループ化した場合、集計関数は無駄になります。なぜなら、それは時間の差異ごとに別々の行を持つからです。集計関数を使用したクエリにcase文を組み込む方法

私がしたいのは、そのケースステートメントの結果、つまり「Days」または「Nights」でグループ化することです。一時的なテーブルにデータを入れてからtempから選択するというかなりのゴミ解決策がありますテーブルには集計関数が含まれていますが、私はよりよい方法が必要であると信じています。

論理的にはhaving節に似ていますが、selectでは使用すると思われます。

SELECT  
    d.DeptName, 
    CASE 
     WHEN DATEPART(hh, nmm.incidentdate) < 6 OR 
      DATEPART(hh, nmm.incidentdate) >= 18 
      THEN 'Nights' 
     WHEN DATEPART(hh, nmm.incidentdate) >= 6 AND 
      DATEPART(hh, nmm.incidentdate) < 18 
      THEN 'Days' 
    END AS [Shift], 
    COUNT(nmm.ReferenceNo) 
FROM 
    NearMissesMain nmm 
INNER JOIN 
    Departments d ON d.DepartmentID = nmm.reporterdepartment 
WHERE 
    nmm.DepartmentID = 1 
GROUP BY 
    d.DeptName 

答えて

1

十分です。 SQLに何をするように依頼しているのか考えているなら、NightsやDaysのような複数の日付を探していますが、1つの行に入れたいと思っています。あなたは同じ参照番号のために夜と日の両方を持つことができます。下記の試験は行っていません、それは完璧ではないですが、うまくいけば、それはあなたのアイデアを与えた場合、謝罪しては:

SELECT  A.DeptName    , 
      A.[Shift]    , 
      COUNT(A.ReferenceNo) 

FROM 
(
     SELECT  d.DeptName, 
        CASE WHEN DATEPART(hh, nmm.incidentdate) < 6 or DATEPART(hh, nmm.incidentdate) >= 18 then 'Nights' 
         WHEN DATEPART(hh, nmm.incidentdate) >= 6 and DATEPART(hh, nmm.incidentdate) < 18 then 'Days' 
         END AS [Shift], 
        nmm.ReferenceNo 
     FROM  NearMissesMain nmm 
     INNER JOIN Departments d on d.DepartmentID = nmm.reporterdepartment 
     WHERE  nmm.DepartmentID = 1 
) AS A 
GROUP BY A.DeptName , 
      A.[Shift] 
+0

ありがとうこれは動作し、一時テーブルを使用して保存..ありがとう!私はサブクエリなしでこれを行うより洗練された方法があるかもしれないと考えていたが、これを受け入れるだろう。 –

+0

あなたはグループの中のcaseステートメントを潜在的に使うことができます。それは、導かれた表を避けるでしょう。 – Leonidas199x

0

あなたは同様にして、グループに以下を追加することができます

group by d.DeptName, 
CASE WHEN DATEPART(HH, NMM.INCIDENTDATE) < 6 OR DATEPART(HH, NMM.INCIDENTDATE) >= 18 THEN 'NIGHTS' 
WHEN DATEPART(HH, NMM.INCIDENTDATE) >= 6 AND DATEPART(HH, NMM.INCIDENTDATE) < 18 THEN 'DAYS' 
END 

あなたは派生テーブルを使用する必要があります

+0

私はちょうどあなたが、すべてでグループを示唆するもの、日または夜でグループ化したいので、これは動作しません。事故の2番目の違い。 –

+0

ちょうどあなたの日付の時間の一部に気づいた。 –

関連する問題