我有兩個簡單的列:datetime PayDate
和int Amount
我試圖寫一個查詢,每天分開計數Amount
但它不起作用。別名列SQL
SELECT YEAR(PayDate) + '/' + MONTH(PayDate) + '/' + DAY(PayDate) as a,
COUNT(Amount) as b
FROM TABLE1
GROUP BY a,b
謝謝你的幫忙。
我有兩個簡單的列:datetime PayDate
和int Amount
我試圖寫一個查詢,每天分開計數Amount
但它不起作用。別名列SQL
SELECT YEAR(PayDate) + '/' + MONTH(PayDate) + '/' + DAY(PayDate) as a,
COUNT(Amount) as b
FROM TABLE1
GROUP BY a,b
謝謝你的幫忙。
你爲什麼這一切混亂的字符串連接困擾?如果您想要特定輸出,請在客戶端上格式化。儘可能使用基本類型而不是字符串。
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在你的問題中。)
非常感謝你 – 2012-08-13 15:52:04
如果我想在'mysql'中做到這一點呢?它有什麼不同? – 2012-08-13 15:54:04
@masoud是的,可能。我不使用MySQL,但是當你提出一個雙管齊下的問題時,這就是你面臨的問題,並不是所有的答案都適合你的整個問題。 – 2012-08-13 15:54:59
至少在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)
'COUNT(金額)'在GROUP BY列表中沒有意義。 – 2012-08-13 15:21:11
將varchar值「/」轉換爲數據類型int時轉換失敗。 – 2012-08-13 15:47:10
你不能在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上,你也可以得到日期時間列的日期,只需購買使用。我不知道爲什麼你會在這種情況下通過別名b分組。在大多數情況下,您可能還想按日期值排序。
SELECT DATE(PayDate) as a, COUNT(Amount) as b
FROM TABLE1
GROUP BY a
ORDER BY a
你使用SQL Server或MySQL?你是否意外標記了兩個或更多的網絡? – 2012-08-13 15:22:00
嗨,我標記都是因爲語法是相同的。 – 2012-08-13 15:24:23
那是放肆的;它可能不是。例如,我的答案有代碼可以在SQL Server上工作,但不能在MySQL上工作。如果您試圖獲得與這兩種平臺兼容的通用代碼,則應該明確陳述,而不是強迫人們從您的代碼中做出假設。也意識到它並不總是可能的。 – 2012-08-13 15:26:03