gpt4 book ai didi

sql - 有趣的 SQL 排序问题

转载 作者:行者123 更新时间:2023-12-04 19:14:23 24 4
gpt4 key购买 nike

现在是关键时刻,我最近一份契约(Contract)的最后期限将在两天后到来,除了一个问题外,几乎所有东西都已完成并且工作正常(敲木头)。

在我的一个存储过程中,我需要返回一个结果集,如下所示。

group_id      name
-------- --------
A101 Craig
A102 Craig
Z101 Craig
Z102 Craig
A101 Jim
A102 Jim
Z101 Jim
Z102 Jim
B101 Andy
B102 Andy
Z101 Andy
Z102 Andy

名称需要按组 id 的第一个字符排序,并且还包括 Z101/Z102 条目。通过严格按组 id 排序,我得到如下结果集:
group_id      name
-------- --------
A101 Craig
A102 Craig
A101 Jim
A102 Jim
B101 Andy
B102 Andy
Z101 Andy
Z102 Andy
Z101 Craig
Z102 Craig
Z101 Jim
Z102 Jim

我真的想不出一个不涉及我制作游标和膨胀存储过程的解决方案。我敢肯定,一个伟大的头脑有一个优雅的解决方案,我很想看看社区能想出什么。

提前致谢。

编辑:让我扩展 :) 对不起,太晚了,我喝咖啡了。

上述结果集是一种特殊类型数据输入的特例。为了透明,我们正在制作一个基于选举的网站,这些将是按职位、姓名和地区排序的候选人。

大多数办公室都有多个地区,除了地方法官/验尸官等地区职位,只有一个。 Z 作为缺席机器和缺席纸票的“区”出现。

非裁判官职位可以先按名称排序,因为它们都是组合在一起的。然而,现有系统在大量信息中列出了所有治安官,而他们应该按各个地区进行分类。这就是问题所在。

为了保护我的自尊心,我想补充一点,我无法控制数据库的规范化。是客户给我的。

如果有帮助,这是我的存储过程的 order 子句:
    ORDER BY    candidate.party,
candidate.ballot_name,
CASE WHEN candidate.district_type = 'MAG' THEN LEFT(votecount.precinct_id, 1) END,
candidate.last_name,
candidate.first_name,
precinct.name

编辑 2 :这是我目前的立场(凌晨 1 点 43 分)-

我正在使用以下建议来创建条件内部联接,如下所示:
    IF          candidate.district_type = 'MAG'
BEGIN
(
SELECT candidate.id AS candidate_id, candidate.last_name, LEFT(votecount.precinct_id, 1) AS district, votecount.precinct_id
FROM candidate
INNER JOIN votecount
ON votecount.candidate_id = candidate.id
GROUP BY name
) mag_order
INNER JOIN mag_order
ON mag_order.candidate_id = candidate.id
END

然后我将按 mag_order.district、candidate.precinct_id、candidate.last_name 对其进行排序。

出于某种原因,将( SELECT )别名为 mag_order 时出现 SQL 错误。有人看到代码有什么问题吗?我不能为我的生活。对不起,这有点切线。

最佳答案

SELECT g1.group_id, g1.name
FROM
groups g1
INNER JOIN
(
SELECT MIN(group_id), name
FROM groups
GROUP BY name
) g2 on g1.name = g2.name
ORDER BY g2.group_id, g1.name, g1.group_id

关于sql - 有趣的 SQL 排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2778467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com