0

実際、この質問は私の 初心者のSQL結合クエリのフォローアップです

混乱を少なくするために、前の質問を更新する必要があるかどうかわからないため、新しい質問を作成しています。したがって、ここでの問題はGROUP BY機能にあります。

私はテーブルを持っていますDept_Employee

    DeptId    EmployeeId    Salary        JoinDate (DD-MM-YYYY)     DeptName
    --------------------------------------------------------------------------
    1            77         8787           11-09-2010                  ADMIN
    1            87         9877           12-08-2010                  ADMIN 
    1            76         9544           08-11-2010                  SUPPORT  
    2            33         9999           12-05-2010                  ADMIN

そして、これから新しいテーブルを作成し、同じ部門のすべての従業員が2010年1月12日(12月1日)より前で、給与が8000以上でDeptIdある場合にtrueを返す新しいブール列を作成します。joindateDeptName="Admin"

したがって、この場合、結果は次のようになります。

    DeptId     NewEmployees
    ------------------------
    1            False
    2            True

私はこのようなことを試みました

   SELECT DeptId, 
     CASE WHEN MIN(Salary) > 8000 AND 
               MAX(JoinDate) <= DATE'2010-12-01' And
               DeptName ="Admin" THEN True
          ELSE FALSE
     END AS NewEmployees
   FROM Dept_Employee
   GROUP BY DeptId

しかし、私は例外を得ています

GROUPBY式ではありません

誰かが正しい方法を提案できますか?どういうわけかサブクエリを作成する必要がありますか?

ジーナ。

4

4 に答える 4

1
SELECT  DeptID,
        CASE WHEN totals = totalCount THEN 'TRUE' ELSE 'FALSE' END NewEmployees
FROM
(
    SELECT  DeptID, 
            SUM(CASE WHEN Salary > 8000 AND JoinDate <= DATE'2010-12-01' AND DeptName = 'ADMIN' THEN 1 ELSE 0 END) totals,
            COUNT(*) totalCount
    FROM    tableName
    GROUP   BY DeptID
) s
于 2013-02-11T15:08:05.623 に答える
0

元のクエリの正しい構文は次のとおりです。

SELECT deptno 
 , (CASE WHEN MIN(Sal) > 3000 AND MAX(hiredate) <= DATE '2010-12-01' 
     AND deptno = 10 THEN 'True' ELSE 'FALSE'
    END) NewEmployees
 FROM scott.emp
GROUP BY deptno
/

これは単なる構文例です。何を達成しようとしているのかわからない...

于 2013-02-11T15:22:27.973 に答える
0

DeptName は、GROUP BY 句に指定するか、集計関数で使用する必要があります。

于 2013-02-11T15:09:31.970 に答える
0

これを試して:

SELECT Dept_Employee.DeptId, CASE WHEN OptionDept.DeptId IS NULL THEN 'False' ELSE 'True' END AS NewEmployees
FROM Dept_Employee
LEFT JOIN 
(
    SELECT DeptId
    FROM Dept_Employee
    GROUP BY DeptId
    HAVING MIN(Salary) > 8000 AND MAX(JoinDate) <= DATE'2010-12-01' AND DeptName ="Admin"
) AS OptionDept ON OptionDept.DeptId = Dept_Employee.DeptdId

説明: 選択リストで、Group By 句に参加していないフィールドを参照することはできません。回避策として、group by の後で個別のレコードではなくグループで作業しているため、サブクエリを使用する必要があります。

于 2013-02-11T15:05:16.297 に答える