[英]Alias Column SQL
我有兩個簡單的列: datetime PayDate
和int Amount
我試圖編寫一個查詢,該查詢將每天的Amount
計數分開,但是它不起作用。
SELECT YEAR(PayDate) + '/' + MONTH(PayDate) + '/' + DAY(PayDate) as a,
COUNT(Amount) as b
FROM TABLE1
GROUP BY a,b
謝謝你的幫助。
至少在SQL Server中,不能在GROUP BY語句中使用別名 。 您必須重復該語句。
傷心,但真實。
SELECT YEAR(PayDate) + '/' + MONTH(PayDate) + '/' + DAY(PayDate) as a,
COUNT(Amount) as b
FROM TABLE1
GROUP BY YEAR(PayDate) + '/' + MONTH(PayDate) + '/' + DAY(PayDate),COUNT(Amount)
您為什么要為所有這些混亂的字符串連接感到困擾? 如果需要特定的輸出,請在客戶端上設置格式。 盡可能使用基本類型而不是字符串。
SELECT CONVERT(DATE, PayDate) AS a, COUNT(Amount) AS b
FROM dbo.TABLE1
GROUP BY CONVERT(DATE, PayDate);
如果您有一個合理的復雜表達式,則避免重復該表達式的最簡單方法是使用子查詢或CTE:
SELECT a, COUNT(b) FROM
(SELECT CONVERT(DATE, PayDate) AS a, Amount AS b FROM dbo.TABLE1) AS x
GROUP BY a;
-- or
WITH x(a,b) AS
(SELECT CONVERT(DATE, PayDate), Amount FROM dbo.TABLE1)
SELECT a, COUNT(b) FROM x
GROUP BY a;
(我不知道為什么您要在問題中同時按a和b分組。)
您不能在GROUP BY
語句中使用別名 。 無需使用GROUP BY Count(Amount)
SELECT YEAR(PayDate) + '/' + MONTH(PayDate) + '/' + DAY(PayDate) as a,
COUNT(Amount) as b
FROM TABLE1
GROUP BY YEAR(PayDate) + '/' + MONTH(PayDate) + '/' + DAY(PayDate)
或在SQL Server中執行此操作的其他方法:
SELECT Convert(varchar(20),PayDate,111) as a,
COUNT(Amount) as b
FROM TABLE1
GROUP BY Convert(varchar(20),PayDate,111)
參見強制轉換
在MySQL上,您還可以簡單地通過使用獲得datetime列的日期。 我不知道為什么在這種情況下為什么要按別名b分組。 在大多數情況下,您可能還希望按日期值排序。
SELECT DATE(PayDate) as a, COUNT(Amount) as b
FROM TABLE1
GROUP BY a
ORDER BY a
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.