2011-04-28 79 views
7

之類的標題說,這裏是我的代碼:是否可以使用不在GROUP BY中的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的運行,反正是有解決這個問題?

回答

19

應用其它集合,所以怎麼樣;

order by min([date_in]) 
+1

想知道爲什麼沒有想到這一點......謝謝! :d – dreamer 2011-04-28 12:11:23

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) 
+0

但這樣會導致它字母順序排序,因爲它已經被轉換爲VARCHAR,我需要它的日期進行排序...... – dreamer 2011-04-28 12:05:56

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)) 
+0

但會導致它按字母順序排序,因爲它已被轉換爲varchar,我需要它按日期排序... – dreamer 2011-04-28 12:04:57

+0

@dreamer:這是yyyy-mm-dd格式的美;詞彙順序是按時間順序排列的。 :) – 2011-04-28 12:28:42

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,而是希望包括一些參考吧。

0

您不能像原始查詢那樣處理date_in列。相反,你可以嵌套查詢,這樣閱讀:

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 

我無法測試它在我的開發環境,但我相信這給你的想法。

0

使用本

order by 
1,2,3,4,5