是否可以使用不在GROUP BY中的ORDER BY列?

时间:2011-04-28 11:57:43

标签: sql sql-server tsql group-by sql-order-by

像标题所说,这是我的代码:

SELECT
  material,
  SUM([Amount]) AS [Amount],
  RIGHT(CONVERT(varchar(50), [date_in], 106), 8)
FROM
  [rec_stats]
GROUP BY
  material,
  RIGHT(CONVERT(varchar(50), [date_in], 106), 8)
ORDER BY
  material,date_in
由于date_in,代码不会运行,无论如何都要解决这个问题?

6 个答案:

答案 0 :(得分:24)

应用另一个聚合,那么怎么样;

order by min([date_in])

答案 1 :(得分:1)

按照您分组的相同表达式排序。

最好对当月的DATE表示进行分组和排序。

SQL Server 2008中:

SELECT  material, SUM([Amount]) AS [Amount], DATEADD(d, 1 - DAY(GETDATE()), CAST(GETDATE() AS DATE))
FROM    [rec_stats]
GROUP BY
        material,
        DATEADD(d, 1 - DAY(GETDATE()), CAST(GETDATE() AS DATE))
ORDER BY
        material, DATEADD(d, 1 - DAY(GETDATE()), CAST(GETDATE() AS DATE))

答案 2 :(得分:0)

您只能通过在select语句中使用的内容进行排序。在选择语句中无法单独使用Date_in,因此您无法使用它。根据您的RDBMS,您可以执行以下操作:

SELECT
material,
  SUM([Amount]) AS [Amount],
  RIGHT(CONVERT(varchar(50), [date_in], 106), 8)
FROM
  [rec_stats]
GROUP BY
  material,
  RIGHT(CONVERT(varchar(50), [date_in], 106), 8)
ORDER BY
  material,RIGHT(CONVERT(varchar(50), [date_in], 106), 8)

答案 3 :(得分:0)

您是否尝试按月汇总?如果是这样,请尝试:

SELECT
  material,
  SUM([Amount]) AS [Amount],
  DATEPART(year, [date_in]) as y,
  DATEPART(month, [date_in]) as m,
  DATEPART(month, [date_in]) + ' ' + DATEPART(year, [date_in]) AS MonthYearCombined
FROM
  [rec_stats]
GROUP BY
  material,
  DATEPART(year, [date_in]),
  DATEPART(month, [date_in])
ORDER BY
  material,y,m

注意:您可能必须转换“MonthYearCombined”列中的值 - 我实际上建议您在代码而不是SQL中执行此操作,但希望包含对它的一些引用。

答案 4 :(得分:0)

您无法像原始查询一样处理date_in列。相反,您可以NEST查询并按如下方式阅读:

SELECT
  material,
  SUM([Amount]) AS [Amount],
  RIGHT(CONVERT(varchar(50), [date_in], 106), 8)
FROM
(
Select material, Amount, RIGHT(CONVERT(varchar(50), [date_in], 106), 8) as DateIn
From [rec_stats]
) X
GROUP BY
  material,
  DateIn
ORDER BY
  material,DateIn

我无法在我的开发环境中测试它,但我相信这会给你一个想法。

答案 5 :(得分:0)

使用此

order by
1,2,3,4,5