在我有一个像这样的表的情况下:
int id (PK)
int staff_id
int skill_id
bit mainskill
我只想为每个工作人员(用staff_id表示)选择一个记录,列出他们的主要技能,用mainskill中的(1)表示。如果没有主要技能,我想退还该工作人员的任何技能记录。例如:
id staff_id skill_id mainskill
1 1 24 1
2 1 55 0
3 1 7 0
4 4 24 0
5 4 18 0
6 6 3 0
7 6 18 1
查询应返回:
id staff_id skill_id mainskill
1 1 24 1
4 4 24 0
7 6 18 1
我尝试了分组,DISTINCT等的各种组合,但无法获得我想要的输出。任何帮助表示赞赏。
WITH rows AS (
SELECT t.id,
t.staff_id,
t.skill_id,
t.mainskill,
ROW_NUMBER() OVER (PARTITION BY t.staff_id ORDER BY t.mainskill DESC) AS rank
FROM TABLE t)
SELECT r.id,
r.staff_id,
r.skill_id,
r.mainskill
FROM rows r
WHERE r.rank = 1
ORDER BY r.staff_id
SELECT r.id,
r.staff_id,
r.skill_id,
r.mainskill
FROM (SELECT t.id,
t.staff_id,
t.skill_id,
t.mainskill,
ROW_NUMBER() OVER (PARTITION BY t.staff_id ORDER BY t.mainskill DESC) AS rank
FROM TABLE t) r
WHERE r.rank = 1
ORDER BY r.staff_id
两者都使用ROW_NUMBER,仅自SQL
Server 2005起可用。
这是我的主页,在那里我选择了一个选项字段。 opt1.php: 这是我的javascript,在这里我从上面的select获得值,并传递给opt2.php 这是我的opt2.php页面,用于显示sub select。 实际上,这并没有产生预期的结果。 有没有逻辑上或处理上的错误?
问题内容: 我对SQL有点陌生,在构造select语句时遇到了麻烦。我有两个表: 我希望所有具有特定属性的用户记录。有没有一种方法可以在一个SQL调用中获取它们,或者我是否需要首先从属性表中获取所有用户ID,然后分别选择每个用户? 问题答案: 如果您要选择的每个用户只有一个属性行,我想这就是您想要的: 如果您有多个与“ whatnot”匹配的属性行,并且只需要一个属性行(取决于数据库系统),则需要
为了澄清,我有一个全名数组,但是文档的firstname和lastname是分开的,所以我想做一些类似的事情:
问题内容: 我正在寻找一个SQL查询来选择所有未由同一表上的另一个查询选择的记录。具体来说,我想选择所有具有特定字段(’fieldA’)重复项的记录,然后删除除其中一个记录以外的所有记录。 因此,一条select语句可能类似于以下内容(不起作用!): 如果不可能进行单个查询,那么最有效的解决方案是什么? 问题答案: 具体来说,我想选择所有具有特定字段(’fieldA’)重复项的记录,然后删除除其中
问题内容: 这就是我想要做的。假设我有这张桌子t: 对于每个ID,我想选择包含最小record_date的行。所以我会得到: 我看到的唯一解决方案是假定所有record_date条目都是不同的,但在我的数据中并非如此。使用带有两个条件的子查询和内部联接将为我提供某些ID的重复行,这是我不想要的: 问题答案: 怎么样: 这将获取每个ID的最短日期,然后基于这些值获取值。唯一的重复项是同一ID的最小r
问题内容: 我有以下型号: 在管理界面中,当创建新演示时,在用户从下拉列表中选择类别之后,我想限制“项目”下拉列表中的选择数量。如果用户选择其他类别,则项目选择应相应更新。我想在客户端上限制项目选择,甚至在服务器上进行表单验证之前。这是为了提高可用性,因为项目列表可能超过1000个,能够按类别缩小范围将有助于使其更易于管理。 是这样做的“捷径”还是自定义JavaScript是这里的唯一选择? 问题