模拟 group by,order by,从 mysql 到 ms sql 2000 的限制

Posted

技术标签:

【中文标题】模拟 group by,order by,从 mysql 到 ms sql 2000 的限制【英文标题】:Emulate group by, order by, limit from mysql to ms sql 2000 【发布时间】:2011-12-15 14:46:35 【问题描述】:

我在 mysql 中有一个查询:

select slscod,slsname,brc
from td_casa
group by slscod
order by slsname
limit 0,100

此查询检索具有slsnamebrc 的前100 个唯一销售代码,按slsname 升序排列。

如何在 MSSQL 2000 中更改此查询?

【问题讨论】:

你试过在 SQL Server 上运行它吗?它是否返回任何错误消息? @a'r:这不是很明显的有效 SQL Server 语法。这就是为什么有人问这个问题...... 【参考方案1】:

基本语法是:

select top 100 slscod,slsname,brc 
from td_casa 
group by slscod 
order by slsname

【讨论】:

不起作用,我收到一个错误:[Err] 42000 - [SQL Server]Column 'td_casa.slsname' 在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY 子句。【参考方案2】:
SELECT TOP 100 slscod, slsname, brc
FROM td_casa
GROUP BY slscod, slsname, brc
ORDER BY slsname

注意:关于您对 Column 'xyz' 在 select ... 错误中的评论无效,我注意到您选择了 3 列,但在 GROUP BY 子句中指定了 1 列。这是here 所述的 MySQL 特定行为:

MySQL 扩展了 GROUP BY 的使用以允许选择以下字段 GROUP BY 子句中未提及。如果你没有得到 您期望从查询中得到的结果,请阅读说明 第 11.15 节“使用的函数和修饰符”中的 GROUP BY 带有 GROUP BY 子句”。

【讨论】:

如果采用限制,我又遇到了问题,例如在 mysql 中,我想将开始记录从 30 到 100。这是在 mysql 查询中:select slscod,slsname,brc from td_casa group by slscod按 slsname 订购限制 30,100。如何在 MSSQL 2000 中更改此查询? @IrfaniFirdausy:见:***.com/questions/2135418/… 恐怕你的手被MSSQL2000束缚了。但这值得研究:***.com/questions/595123/… 哦,是的,SQL-Server-2000 对 OFFSET 版本的选项有限。另见这篇文章:4guysfromrolla.com/webtech/041206-1.shtml @leoinfo 的回答:***.com/questions/187998/row-offset-in-sql-server【参考方案3】:

因为在 MSSQL 2000 中不支持 ROW_NUMBER()LIMIT ... OFFSET .. 最后,我找到了这个查询:

SELECT slscod, MIN(slsname) slsname, MIN(brc) brc FROM (
    SELECT top 30 slscod, MIN(slsname) slsname, MIN(brc) brc FROM
    (
        SELECT TOP (1*30) slscod, MIN(slsname) slsname, MIN(brc) brc
        FROM td_casa group by slscod
        ORDER BY slsname ASC
    ) AS t1 group by slscod
     ORDER BY slsname DESC ) AS t2 group by slscod ORDER BY MIN(slsname) ASC

如果在mysql中也是这样:

select slscod,slsname,brc from td_casa group by slscod order by slsname limit 0,30

如果您更改TOP (2*30),这将是相同的limit 30,30TOP (3*30) 这是相同的limit 60,30 等等。

迫切需要努力。 谢谢大家。让我们干杯

【讨论】:

以上是关于模拟 group by,order by,从 mysql 到 ms sql 2000 的限制的主要内容,如果未能解决你的问题,请参考以下文章

mysql8 的 group by错误

SQL中的group by语句和order by语句怎么用?最好能有个例子

order by 与group by 啥意思啊,数据库高手看看

从 3 个表中选择,在两个 group by 之前有两个 order by

mysql “group by ”与"order by"的研究--分类中最新的内容

sql中order by和group by的区别