0

この 60,000 人を超えるリストからランダムに 400 人の従業員を抽出する必要があるコードがあります。8 つの異なるジョブ グループがあり、各グループから特定の数が必要です。したがって、合計 400 のランダム サンプルのうち、400 は 8 つのグループのそれぞれからの特定の数値で構成される必要があります。これまでのコードは次のとおりです。

SELECT TOP (400) Business_Unit, GEMSID, First_Name, Last_Name, Region, District, Job_Function,     Email_Address, Job_Group_Code
FROM  dbo.v_TMS_employee_HR
ORDER BY NEWID()

IE: 返された 400 のランダム レコードのうち、グループ 1 は 45、グループ 2 は 50、グループ 3 は 35、グループ 4、ニーズ 25、グループ 5 は 100、グループ 6 は 5、グループ 7 は 70、グループ 8 は必要です。 70。

各グループは、1 ~ 4 の異なるジョブ コードで構成されます。

4

2 に答える 2

0

グループが 8 つしかなく、1 回限りの場合は、@PM 77-1 が提案した方法を試してください。ただし、UNION ALL代わりに を使用しますUNION

複数のグループがある場合、または各グループから選択されたレコードの数が異なる場合は、次の方法を試すことができます

DECLARE @GroupSelect TABLE (Job_Group_Code INT, NumberOfRecord INT)

INSERT INTO @GroupSelect VALUES (1 ,45), (2 ,50)  , ....  -- List all your group and number of records your want select from them

;WITH tbl AS (
SELECT Business_Unit, GEMSID, First_Name, Last_Name, Region, District, Job_Function,     Email_Address, Job_Group_Code
    , ROW_NUMBER() OVER (PARTITION BY Job_Group_Code ORDER BY NEWID()) as RowNo
FROM  dbo.v_TMS_employee_HR
)
, numbers ( 
-- if you don't have number table, you may use this. 
 select number + 1 as number from master..spt_values WHERE type = 'P'
)
SELECT t.* 
from tbl t
INNER JOIN @GroupSelect sg  
    ON sg.Job_Group_Code = t.Job_Group_Code
INNER JOIN numbers n 
    ON sg.NumberOfRecord >= n.number
WHERE n.number = t.RowNo
于 2013-04-25T20:24:02.187 に答える
0

8 つのグループだけの場合は、8 つの個別のクエリ (グループごとに 1 つ) を独自のTOP番号で作成し、UNIONそれらをすべて一緒にすることができます。

このようなもの (各グループと正しいグループ コードを取得するには、正しいレコード金額を設定する必要があります):

SELECT * FROM 
(SELECT TOP (100) Business_Unit, GEMSID, First_Name, Last_Name, Region, District, Job_Function,     Email_Address, Job_Group_Code
FROM  dbo.v_TMS_employee_HR
WHERE Job_Group_Code=1 
ORDER BY NEWID())
UNION
...................
UNION
...................
...................
UNION
SELECT * FROM (
SELECT TOP (10) Business_Unit, GEMSID, First_Name, Last_Name, Region, District, Job_Function,     Email_Address, Job_Group_Code
FROM  dbo.v_TMS_employee_HR
WHERE Job_Group_Code=8 
ORDER BY NEWID())

グループに複数の job_group_codes があることを明確にしたので、代わりに使用する必要がありますWHERE Job_Group_Code IN (1,2,3)

于 2013-04-25T20:00:48.523 に答える