【问题标题】:SQL Server Order by numeric varcharSQL Server 按数字 varchar 排序
【发布时间】:2014-10-03 20:19:09
【问题描述】:

我有这个问题:

select  cast(MONTH(c.dataregistro) as VARCHAR(2)) as DATA, numberofquotesreturned, count(*) AS CountNumberQuotes from contratacao c
inner join teleportpedidocotacao tpc  on c .idcontratacao = tpc.idcontratacao
where cast(c.dataregistro as date) > '2014-01-01 00:00:00' AND numberofquotesreturned = 5
group by numberofquotesreturned, cast(MONTH(c.dataregistro) as VARCHAR(2)) 
order by cast(MONTH(c.dataregistro) as VARCHAR(2))

结果是:

10  5   347
2   5   112
3   5   914
4   5   786
5   5   1184
6   5   2361
7   5   2430
8   5   2184
9   5   2709

我想按第一列的整数排序,如您所见,“10”排在第一位。我该如何解决?

【问题讨论】:

  • @sgeddes 消息 8127,级别 16,状态 1,第 92 行 列“contratacao.DataRegistro”在 ORDER BY 子句中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

标签: sql-server sql-order-by azure-sql-database


【解决方案1】:

只需将演员表移除到varchar

select  MONTH(c.dataregistro) as DATA, numberofquotesreturned, count(*) AS CountNumberQuotes from contratacao c
inner join teleportpedidocotacao tpc  on c .idcontratacao = tpc.idcontratacao
where cast(c.dataregistro as date) > '2014-01-01 00:00:00' AND numberofquotesreturned = 5
group by numberofquotesreturned, MONTH(c.dataregistro)
order by MONTH(c.dataregistro)

【讨论】:

  • 我得到列“contratacao.DataRegistro”在 ORDER BY 子句中无效,因为它既不包含在聚合函数或 GROUP BY 子句中。
  • 其实这个castvarchar在整个查询过程中都是多余的。我已相应地通过帖子进行了编辑以将其完全删除。
  • 就是这样!谢谢!我只是把它复杂化了!星期五!!!我会给你正确的答案!干杯
猜你喜欢
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 2010-09-12
  • 2013-12-12
相关资源
最近更新 更多