又来了200分 sql查询

heavilyarmed 2009-11-12 02:52:42
有个查询问题

原表(这是个临时表)中的部分数据如下

变动次数 人员id 变动类型 申请变动日期 变动原因
----------- ----------- ------------------------------ ----------------------- ------------------------
2 43699 岗位岗级变动 2008-04-10 00:00:00.000 NULL
1 43698 岗位岗级变动 2008-07-07 00:00:00.000 转正定岗
1 43558 岗位岗级变动 2008-07-04 00:00:00.000 转正定岗
1 43487 岗位岗级变动 2008-07-04 00:00:00.000 转正定岗
1 43486 在职转离职 2008-07-04 00:00:00.000 转正定岗
1 43485 岗位岗级变动 2008-07-04 00:00:00.000 转正定岗
1 43484 岗位岗级变动 2008-07-04 00:00:00.000 转正定岗
1 43483 在职转离职 2008-07-04 00:00:00.000 转正定岗
1 43482 岗位岗级变动 2008-07-04 00:00:00.000 转正定岗
1 43481 岗位岗级变动 2008-07-04 00:00:00.000 转正定岗


我要进行查询 人员id 和 变动类型 内不同的数据 不能用distinct
我写的语句是(还不能写order by )

select 人员id,变动类型 from system_1000 group by 人员id,变动类型

但是这样就进行了默认的排序,上面的数据其实已经排好了,不能再进行默认排序了
变成了

人员id 变动类型
----------- ------------------------------
1 部门岗位变动
1 岗位岗级变动
2 部门岗位变动
2 学历变动
3 部门岗位变动
7 部门岗位变动
8 部门岗位变动
9 部门岗位变动
10 部门岗位变动
16 部门岗位变动



如果不进行分组 就是原表的数据显示方式


怎么样 才能 有能进行分组 而且不改变 数据在原表中的顺序呢


...全文
251 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsd123 2009-11-12
  • 打赏
  • 举报
回复
10
wooden954 2009-11-12
  • 打赏
  • 举报
回复
我认为数据行只要显示,就有一个默认顺序,这个顺序和磁盘上的存储顺序不一定相同,所以保持显示顺序没有什么意义。将不稳定的默认顺序变为稳定的指定顺序,在数据读写和显示方面都是有利的
dlcustom 2009-11-12
  • 打赏
  • 举报
回复
heavilyarmed 2009-11-12
  • 打赏
  • 举报
回复
谢谢各位了

齐哥在另一个帖子接分吧

谢谢了
xman_78tom 2009-11-12
  • 打赏
  • 举报
回复
楼主是既要使用 group by 分组,又不要破坏原来的排序?从 group by 的算法来说这是不可能的。

group by 有两种算法:
ORDER GROUP,在处理 GROUP BY 操作时先进行排序,再从已排序的数据中进行分组,此时返回的分组结果将是排序顺序。
HASH GROUP,在处理 GROUP BY 操作时将数据按分组的条件组织到哈希表中,哈希桶中存放的即是分组结果,此时返回的分组结果将是数据在哈希桶中的存放顺序。
SQL77 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 heavilyarmed 的回复:]
引用 27 楼 misterliwei 的回复:
可以试试这句:
SQL codeselect 人员id,变动类型from system_1000groupby 人员id,变动类型OPTION(HASHGROUP , FAST1)


这里面的  OPTION(HASHGROUP , FAST1)
是什么意思  能解释下 吗 
这样查询的数据  就是我想要的了


[/Quote]

OPTION 子句
指定应在整个查询中使用所指定的查询提示。每个查询提示只能指定一次,但允许指定多个查询提示。用该语句只可能指定一个 OPTION 子句。查询提示影响语句中的所有运算符。如果主查询中涉及 UNION,则只有涉及 UNION 运算符的最后一个查询可以有 OPTION 子句。如果一个或多个查询提示导致查询优化器不生成有效计划,则产生 8622 号错误。



注意 查询优化器通常为查询选择最佳执行计划,因此建议有经验的数据库管理员将 <join_hint>、<query_hint> 和 <table_hint> 仅作为最后的手段。


语法
[ OPTION ( < query_hint > [ ,...n ) ]

< query_hint > ::=
{ { HASH | ORDER } GROUP
| { CONCAT | HASH | MERGE } UNION
| {LOOP | MERGE | HASH } JOIN
| FAST number_rows
| FORCE ORDER
| MAXDOP number
| ROBUST PLAN
| KEEP PLAN
| KEEPFIXED PLAN
| EXPAND VIEWS
}

参数
{ HASH | ORDER } GROUP

指定在 GROUP BY、DISTINCT 或 COMPUTE 查询子句中所描述的聚合应使用哈希操作或排列。
heavilyarmed 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 misterliwei 的回复:]
可以试试这句:
SQL codeselect 人员id,变动类型from system_1000groupby 人员id,变动类型OPTION(HASHGROUP , FAST1)
[/Quote]

这里面的 OPTION(HASHGROUP , FAST1)
是什么意思 能解释下 吗
这样查询的数据 就是我想要的了

heavilyarmed 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 sql77 的回复:]
引用 18 楼 sql77 的回复:
引用 9 楼 heavilyarmed 的回复:
后边的  order by  是用户自己写 的  所以很难记录下来 

你的结果是怎么来的,咋一看,人员ID都不是的了

你怎么不解释下呀,兄台,刚开始以为只是按原来顺序排序,后来看了更晕
[/Quote]

就是按新表的顺序排序
misterliwei 2009-11-12
  • 打赏
  • 举报
回复
可以试试这句:

select 人员id,变动类型 from system_1000 group by 人员id,变动类型 OPTION(HASH GROUP , FAST 1)
SQL77 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 sql77 的回复:]
引用 9 楼 heavilyarmed 的回复:
后边的  order by  是用户自己写 的  所以很难记录下来 

你的结果是怎么来的,咋一看,人员ID都不是的了
[/Quote]
你怎么不解释下呀,兄台,刚开始以为只是按原来顺序排序,后来看了更晕
heavilyarmed 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 ai_li7758521 的回复:]
SQL code我要进行查询 人员id 和 变动类型 内不同的数据 不能用distinct
我写的语句是(还不能写orderby )怎么会有这么多要求呢?

[/Quote]

没办法 呵呵 要是方便加 order by 也就没那么大问题了
heavilyarmed 2009-11-12
  • 打赏
  • 举报
回复
着急了
ai_li7758521 2009-11-12
  • 打赏
  • 举报
回复
我要进行查询 人员id  和 变动类型 内不同的数据  不能用distinct 
我写的语句是(还不能写order by )
怎么会有这么多要求呢?
yanglinqiang 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 heavilyarmed 的回复:]
不用这么复杂吧  我想 group by  的默认排序 去掉  按原表的顺序显示
有要求 不能用  order by
[/Quote]
等待高手……

分多楼盖得就是快。。。。
yanglinqiang 2009-11-12
  • 打赏
  • 举报
回复
等待高手……
heavilyarmed 2009-11-12
  • 打赏
  • 举报
回复
通过下面的语句 创建了新表

select
CA01.A_id as '变动次数',
CA01.A0188 as '人员id',
CA01.CA0101 as '变动类型',
CA01.CA0102 as '申请变动日期',
CA01.CA0103 as '变动原因' into system_1000 from
CA01 order by 2 desc , 5 asc

--这句话 查询新表中的数据 ,已经 在创建的时候 就有顺序了
select * from system_1000



microsofttyc 2009-11-12
  • 打赏
  • 举报
回复
有点晕
SQL77 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 heavilyarmed 的回复:]
后边的  order by  是用户自己写 的  所以很难记录下来 
[/Quote]
你的结果是怎么来的,咋一看,人员ID都不是的了
ws_hgo 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 heavilyarmed 的回复:]
引用 12 楼 ws_hgo 的回复:
可以接10分吗


晕死了
[/Quote]
什么问题
我还以为解决了
看看啊
呵呵
nalnait 2009-11-12
  • 打赏
  • 举报
回复
.
加载更多回复(14)

34,596

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧