簡體   English   中英

別名列SQL

[英]Alias Column SQL

我有兩個簡單的列: datetime PayDateint 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM