0

私はSQLを初めて使用します。このようなテーブルがあります

従業員 ID | 従業員名 | EMP_GRADE
  1 テスト 1 A1
  2 テスト 2 A2
  3 テスト 3 A3
  4 テスト 4 A4
  6 テスト 5 A1
  7 テスト 6 A2
  8 テスト7 A3

各グレードの従業員の数を取得する必要があります。最終的な出力は、出力が参照する単一の列で「2 - 2 - 2 - 1」になります (各グレードの従業員数、つまり A1(2) - A2 (2)- A3(2) -A4(1)) . 誰でもこれにSQLクエリを与えることができます。これにはカーソルが必要ないことを願っています。

4

4 に答える 4

1
SELECT COUNT(Emp_id) FROM myTableName GROUP BY EMP_GRADE
于 2013-03-08T06:11:50.270 に答える
0
SELECT STUFF((
  SELECT ' - ' + CAST(COUNT(1) AS VARCHAR(max)) 
  FROM myTable 
  GROUP BY EMP_GRADE 
  ORDER BY EMP_GRADE 
  FOR XML PATH('')
), 1, 3, '')

SQLフィドルの例


フィルタリングしているが、それでもすべての成績の結果を返したい場合は、成績の完全なリストを取得するために自己参加する必要があります。これが1つの方法です:

;WITH g AS (SELECT DISTINCT EMP_GRADE FROM myTable)
SELECT STUFF((
  SELECT ' - ' + CAST(COUNT(t.Emp_id) AS VARCHAR(max)) 
  FROM g
  LEFT OUTER JOIN myTable t ON g.EMP_GRADE = t.EMP_GRADE
      AND t.Emp_id % 2 = 1 --put your filter conditions here as part of the join
  GROUP BY g.EMP_GRADE
  ORDER BY g.EMP_GRADE
  FOR XML PATH('')
), 1, 3, '')

SQLフィドルの例

于 2013-03-08T06:08:43.060 に答える
0

これはうまくいくはずです:

SELECT EMP_GRADE, COUNT(EMP_Id) AS EMPS_COUNT
FROM TableName
GROUP BY EMP_GRADE

それが役立つことを願っています。SQLを学び続けます。

于 2013-03-08T06:16:41.203 に答える
0

使用する:

   DECLARE @Grades varchar(1000)

  SELECT @Grades=coalesce(@Grades + ' ','') +Cast(COUNT(EMP_GRADE) as Varchar(2))+' -'  From TableName 
  Group By EMP_GRADE

  Select @Grades=SUBSTRING(@Grades,0,LEN(@Grades))
  Select @Grades

アップデート:

SELECT @Grades=coalesce(@Grades + ' ','') +Cast(COUNT(t1.EMP_GRADE) as Varchar(2))+' -'  From @tab1 t
Left Join @tab1 t1 On t1.EMP_GRADE= t.EMP_GRADE And  t1.Emp_id= t.Emp_id 
And t1.EMP_GRADE<>'A3' -- Replace conditions here
Group By t1.EMP_GRADE,t.EMP_GRADE
于 2013-03-08T06:12:02.967 に答える