1

私はこのようなテーブルを作ろうとしています:

Manager     Expert          Adminis. Staff
Dept        A.P. | C.P.     A.P. | C.P.     A.P. | C.P.
Management      1   1       1   0              1    1   
Accounting      1   1       1   1              0    0
IT              1   1       2   1              0    0

AP=空きポジション番号 CP=現在ポジション番号

AP は、Positions という名前のテーブルから取得されます。

[Positions](
    [id] [numeric](19, 0) IDENTITY(1,1) NOT NULL,   
    [NumOfAvailablePositions] [int] NULL,
    [PositionType] [varchar](255) NULL, 
    [DepartmentId] [numeric](19, 0) NULL
    )

CP は Title テーブルの Title_Names の数です。

[Title](
    [id] [numeric](19, 0) IDENTITY(1,1) NOT NULL,   
    [Title_Name] [varchar](50) NOT NULL,    
    [Department_Id] [numeric](19, 0) NULL,  
    [Position_Type] [varchar](255) NULL,
    )

要約すると、次の 2 つのクエリの結果を取得しようとしています。

SELECT   DepartmentId, PositionType, NumOfAvailablePositions  
FROM Positions 

SELECT Department_Id, Position_Type, Count (Position_Type) as CurrentPositions
FROM Title group by Department_Id, Position_Type

結果を 1 つのテーブルに結合します (上記を参照)。

次のスクリプトでテーブルを結合してみました。

SELECT Department_Id, PositionType, Count(Position_Type) as PositionCountTitle, Positions.DepartmentId, Positions.NumOfAvailablePositions  
FROM Title, Positions 
GROUP BY Position_Type, Department_Id, Positions.DepartmentId, Positions.NumOfAvailablePositions 
HAVING Title.Department_Id = Positions.DepartmentId

しかし、それは間違った結果をもたらしました。Jasper IReports でこの問題を解決するための推奨事項はありますか?

4

2 に答える 2

2

に置き換えてみてFROM Title, Positionsください

FROM Title INNER JOIN Positions ON Title.[Position_Type]=Positions.[Position_Type]
于 2012-07-03T14:42:57.683 に答える
0

サブクエリを使用せずにこれを行う方法があるかもしれませんが、通常、クエリに頭を悩ませる最初のステップとしては良いと思います。

SELECT title.Department_Id,
       (SELECT NumOfAvailablePositions FROM POSITIONS WHERE Department_Id = position.Department_Id AND PositionType = 'Expert') as expert_ap,
       (SELECT COUNT(*) FROM Title WHERE Department_Id = title.Department_Id AND PositionType = 'Expert') as expert_cp,
       (SELECT NumOfAvailablePositions FROM POSITIONS WHERE Department_Id = position.Department_Id AND PositionType = 'Adminis. Staff') as admin_ap,
       (SELECT COUNT(*) FROM Title WHERE Department_Id = title.Department_Id AND PositionType = 'Adminis. Staff') as admin_cp,
       (SELECT NumOfAvailablePositions FROM POSITIONS WHERE Department_Id = position.Department_Id AND PositionType IS NULL) as rest_ap,
       (SELECT COUNT(*) FROM Title WHERE Department_Id = title.Department_Id AND PositionType IS NULL) as rest_cp,
FROM Title title, Positions position
WHERE Title.Department_Id = Positions.DepartmentId

このクエリには固有の問題がありますが、PositionsテーブルにTitleテーブルにない部門がある場合、クエリで返されることはありません。これがあなたのケースに当てはまらない場合、それは問題ではありません。

于 2012-07-03T14:50:53.063 に答える