将mySQL select转换为SQL select

时间:2012-11-07 15:41:20

标签: mysql sql sql-server

我有这个mySQL select语句,就像我需要它一样工作;

SELECT `requires`, `level` FROM `fp` WHERE `model` = '".$model."' GROUP BY `level` ORDER BY `menu_order`

在表格中,需要级别是char字段。当按* menu_order *排序时, level 的每个值的第一行将始终是我想要检索的 requires 的值。

对于我使用的SQL版本;

SELECT requires, level FROM fp WHERE model = '" & model & "' GROUP BY level ORDER BY menu_order

现在,当我尝试在SQL上运行相同的查询时,我得到了;

requires'_is_invalid_in_the_select_list_because_it_is_not_contained_in_either_an_aggregate_function_or_the_GROUP_BY_clause

我发现了很多这个错误的例子,但似乎都比我想做的更复杂。也许我一直在使用mySQL,以至于我的大脑陷入了这种思维方式。

如何用SQL编写select语句?

2 个答案:

答案 0 :(得分:0)

如果您要使用支持窗口函数的RDBMS(MS SQL Server,Postgres,Oracle),则可以使用ROW_NUMBERlevel的每个值编号行。然后你可以根据你的订单选择第一个。

SELECT requires, level
FROM (
    SELECT requires, level, 
        row_number() OVER (PARTITION BY level ORDER BY menu_order) rn
    FROM fp
    WHERE model = '"' + model + '"'
) A
WHERE rn = 1

这是您的查询的正确翻译,并满足您的要求:

  

按* menu_order *排序时,每个level值的第一行将始终是我想要检索的require值。

答案 1 :(得分:0)

很难将你的sql转换为MsSQL(如果你的意思是SQL),正如MySQL和MsSQL允许使用GROUP BY的方式略有不同。

聚合的功能类似于SUM(),AVG(),COUNT()。因为requires不是聚合,它必须在GROUP BY列表中,否则会出现该错误

您需要告诉我们您要做的事情:我想尝试找到层次结构?

MSSQL

SELECT level, requires 
FROM fp 
WHERE model = '" + model + "' 
GROUP BY level, requires

OR

SELECT level, count(*)
FROM fp 
WHERE model = '" + model + "' 
GROUP BY level