【问题标题】:can't mix order by and group by in sql不能在sql中混合order by和group by
【发布时间】:2012-10-04 10:20:00
【问题描述】:

我遇到了 sql 问题。我不知道为什么访问和 sql server 一直显示错误。 我使用 phpmyadmin,但没有问题。

我有 1 张桌子。我的表名是 t_data

ID  MasterCode  DetailCode  Description  Item  Status
1       1           1.1      Resources   Meat     1
2       1           1.1      Resources   Meat     1
3       1           1.1      Resources   Meat     1
4       1           1.1      Resources   Meat     1
5       3           3.1       Utility    oil      1
6       2           2.1      Transport   BBM      1

我想查询该表并希望结果如下所示:

MasterCode  Description
    1       Resources
    2       Utility
    3       Transport

这是我的 sql 语法

"select MasterCode, Description from t_data group by Description order by MasterCode"

通常我只是使用那个 sql 语法,我可以得到我想要的。但现在我不能。

您尝试执行的查询不包含作为聚合函数的指定表达式。

如果我使用 access 和 sql server,我会收到该错误。如果我在 XAMPP 中使用 phpmyadmin,它工作正常。但我不想使用 phpmyadmin。我想使用访问或sql server。

我已经在谷歌上搜索过这个错误。我把我的 sql 改成这个。

"select count(*), Description from t_data group by Description "

"select a.categoryMaster, b.categoryDesc from t_category a inner join t_category b on a.categoryDetail = b.categoryDetail"

没有解决我的问题,因为我也想获得 MasterCode。

有什么解决办法吗?谢谢。

【问题讨论】:

    标签: sql-server visual-studio-2010 sql-server-2008 ms-access-2007


    【解决方案1】:

    你可以使用DISTINCT:

    select distinct MasterCode, Description 
    from t_data
    order by MasterCode;
    

    SQL Fiddle with Demo

    或者你可以使用像MAX()这样的聚合函数:

    select max(MasterCode) MasterCode, Description 
    from t_data
    group by Description
    order by MasterCode;
    

    SQL Fiddle with Demo

    【讨论】:

    • 我喜欢独特的,但除此之外,为什么不SELECT t_data.mastercode, t_data.description FROM t_data GROUP BY t_data.mastercode, t_data.description
    • @Remou 我最初选择DISTINCT,当我要添加GROUP BY 答案时,它已经发布了,所以我不想复制它。 :)
    • Remou - 在我发布这个问题之前,我已经很喜欢你所说的了。但我有一个错误。 :) @bluefeet - 感谢您的回答。它是正确的..但第二个它给了我一个错误。 :)
    【解决方案2】:

    试试这个

    SELECT MasterCode, Description 
    FROM t_data 
    GROUP BY Description, MasterCode 
    ORDER BY MasterCode
    

    【讨论】:

    • 嗨.. 感谢您的回答。它给了我正确的输入..但蓝脚先来..我只是投票+1。谢谢。 :)
    • 很高兴看到它对您有所帮助! :)
    【解决方案3】:
    select min(MasterCode) MasterCode, Description 
    from t_data 
    group by Description 
    order by MasterCode
    

    select MasterCode, Description 
    from t_data 
    group by MasterCode,Description 
    order by MasterCode
    

    【讨论】:

    • 嗨..谢谢你的回答..第一个是正确的..但是第二个,我遇到了一个错误.. bluefeet首先给出正确的答案..我只是给+1投票你的。谢谢。 :)
    • 我收到了这个错误。 "查询定义的 SELECT 列表中的别名 'MasterCode' 引起的循环引用...
    • 您只需检查 Anil Soman 的上述答案。它的查询相同。
    • 对不起..打错了..第二个是正确的..第一个是错的。
    • 请立即检查。在我用作关键字的 sql server 中。但在 mysql 中不需要
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 2019-01-21
    • 2011-06-28
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多