首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混合变量赋值和数据检索- MySQL与MS SQL Server

问混合变量赋值和数据检索- MySQL与MS SQL Server
EN

Stack Overflow用户
提问于 2019-11-02 03:10:14
回答 1查看 39关注 0票数 1

我正在尝试更新我的sql查询技能,我已经有很多年没有用过它了。

在做一些练习的时候,我遇到了一个问题,这个问题在MySql中很容易解决,但在sql server中就更复杂了。我想知道有没有更简单的方法。

为了这个问题,我将过度简化问题(以避免复杂的代码)。

所以,我有一个数字序列。在这个序列中,我想识别和编号小于10的数字的子序列。当满足数字>= 10时,由seqno计数器识别的新的子序列开始。在mysql查询+结果下面

代码语言:javascript
复制
create table myt1(mynum int);
insert into myt1 values (13), (5), (8), (15), (2), (5), (18), (3), (6), (9), (8), (12);
set @seqno = 0;
select mynum, @seqno := case when mynum < 10 then @seqno else @seqno+1 end as seqno
from myt1  

​

​

现在,对于SQL server,事情变得更加复杂,因为不允许在同一个SELECT语句中进行数据检索和变量赋值。为了获得相同的结果,我的变通方法是将表复制到具有附加列的临时表中,然后使用以下代码更新表/列

代码语言:javascript
复制
create table myt1(mynum int);
insert into myt1 values (13), (5), (8), (15), (2), (5), (18), (3), (6), (9), (8), (12);
select *, 1 as seqno
into #tempt1
from myt1 

declare @seqno int;
set @seqno = 0;
update #tempt1
set 
    seqno = @seqno, 
    @seqno = case when mynum < 10 then @seqno else @seqno+1 end

select * from #tempt1

谁能告诉我在mssql中有没有更简单的方法来编写这个查询,为什么会有mysql中没有的限制?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-11-02 04:26:21

您似乎想要一个超过10的值的累积计数:

代码语言:javascript
复制
select mynum,
       sum(case when mynum >= 10 then 1 else 0 end) over (order by id) as seqno
from myt1;  

Here是一个db<>fiddle。

请注意,SQL表表示无序集合。您的查询假设表的排序--这在一般的SQL或任何数据库中都是无效的。您的查询似乎确实可以在MySQL中工作,但这并不能保证。

我已经添加了一个id列来捕获排序,因此查询将正常工作。

顺便说一句,这也是MySQL 8+中的首选方法;变量的使用正在被弃用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58664606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档