6

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

具有相同邮编的那些应该在顶部,然后是其余的。ORDER BY Zip 不起作用,因为它确实按 ZIP 排序,而不是按出现次数

使用 SQL Server 08

4

3 回答 3

20

SQL Server 2008 使用COUNT() OVER

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

如果您不需要查看附加列,则可以将该COUNT() OVER子句移到 ORDER BY 子句中。

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 回答