0

各ジョブ グループの上位 3 つのトレーニングを選択する必要がある次のクエリがあります。そのため、各ジョブ グループが最も高い 3 つのトレーニングを返す必要があります。ここまでのコードは

SELECT Mgmt_Lvl.MGMT_LVL, Book6.[Item ID], Book6.Description, Count(Book6.[User ID]) AS [CountOfUser ID]
FROM Mgmt_Lvl INNER JOIN ((Book6 INNER JOIN O896IA_VEMPPRSA ON Book6.[User ID] = O896IA_VEMPPRSA.SYS_EMP_ID_NR) INNER JOIN O867IA_VPJOBCO ON O896IA_VEMPPRSA.JOB_CLS_CD = O867IA_VPJOBCO.JOB_CLS_CD) ON Mgmt_Lvl.JOB_GRP_CD = O867IA_VPJOBCO.JOB_GRP_CD
GROUP BY Mgmt_Lvl.MGMT_LVL, Book6.[Item ID], Book6.Description
ORDER BY Count(Book6.[User ID]) DESC;

Count(Book6.[User ID]) AS [CountOfUser ID]

の上位 3 つが必要なフィールドです

4

1 に答える 1

0

必要なのは、row_number() 関数を使用した共通テーブル式 (CTE) です。

数えたい分野を「職種群」と呼んで把握するのは難しい。その名前のフィールドはありません。そうは言っても、必要なクエリの基本的な例を次に示します。フィールドを適切に置き換えると、目的の出力が得られるはずです。

WITH CTE_NAME (COL1, COL2, JOB_GROUP, ROWNUM)
AS
(
SELECT ROW_NUMBER() OVER(PARTITION BY JOB_GROUP ORDER BY JOB_GROUP)
      , COL1
      , COL3
      , JOB_GROUP
FROM TABLE A
JOIN TABLE B
ON A.KEY = B.KEY
)

SELECT * 
FROM CTE_NAME
WHERE ROWNUM IN ('1','2','3')
ORDER BY JOB_GROUP

説明: 「PARTITION BY」は、入力したフィールドに基づいてデータをグループに分けます。ROW_NUMBER() 関数を追加すると、作成したグループ内の各レコードに一意の行番号が割り当てられます。したがって、ROWNUM の '1'、'2'、'3' を選択することで、基本的に各グループの上位 3 行を選択します。CTE式で正しいフィールドをORDER BYするようにしてください。

于 2013-10-30T18:30:57.483 に答える