6

TABLEA

JobCode Job1 Job2 Job3 zip
------- ---- ---- ---- ----------
F       F    S    NULL 90030
F       F    S    NULL 90031
F       F    S    NULL 90031
F       F    S    NULL 90034
F       F         NULL 90034
F       F    S    NULL 90034
F       F    S    NULL 90034
F       F         NULL 90034
F       F    S    NULL 90035
F       F         NULL 90035-4640

推測される結果:

JobCode Job1 Job2 Job3 zip
------- ---- ---- ---- ----------
F       F    S    NULL 90034
F       F         NULL 90034
F       F    S    NULL 90034
F       F    S    NULL 90034
F       F         NULL 90034
F       F    S    NULL 90031
F       F    S    NULL 90031
F       F    S    NULL 90030
F       F    S    NULL 90035
F       F         NULL 90035-4640

同じZipを使用しているものを上に配置すると、残りが続きます。ORDER BY Zipは、発生回数ではなくZIPで並べ替えられるため、機能しません。

SQLServer08の使用

4

3 に答える 3

20

SQLServer2008を使用COUNT() OVER

select *, c = count(1) over (partition by zip)
from tbl
order by c desc;

追加の列を表示する必要がない場合は、COUNT() OVER句をORDERBY句に移動できます。

select JobCode, Job1, Job2, Job3, zip
from tbl
order by count(1) over (partition by zip) desc;
于 2012-10-29T19:32:20.423 に答える
5

これを実現するには、郵便番号ごとのカウントを返すサブクエリに対して結合する必要があります。結合されたサブクエリは、カウントを提供するためにのみ必要です(表示されていない場合でも)が、メインテーブルyourtableは残りのすべての列を提供します。

SELECT 
  JobCode, 
  Job1,
  Job2,
  Job3,
  subq.zip
FROM
  yourtable
  JOIN (
     /* Subquery returns count per zip group */
     SELECT zip, COUNT(*) AS numzip 
     FROM yourtable 
     GROUP BY zip
  ) subq ON yourtable.zip = subq.zip
ORDER BY numzip DESC
于 2012-10-29T19:29:56.053 に答える
1
SELECT 
  JobCode, Job1, Job2, Job3, order_jobs.zip
FROM
  jobs
  JOIN (SELECT zip, COUNT(*) AS zipcount FROM jobs GROUP BY zip) ordering 
ON jobs.zip = ordering.zip
ORDER BY zipcount DESC
于 2012-10-29T19:29:40.110 に答える