0

2つの単純な列がdatetime PayDateあります。1日あたりint Amount のカウントを分離するクエリを作成しようとしましたが、機能しません。Amount

SELECT YEAR(PayDate) + '/' + MONTH(PayDate) + '/' + DAY(PayDate) as a,
COUNT(Amount) as b
FROM TABLE1
GROUP BY a,b

助けてくれてありがとう。

4

4 に答える 4

3

少なくともSQLServerでは、GROUPBYステートメントでエイリアスを使用することはできません。ステートメントを繰り返す必要があります。

悲しいですが本当。

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)
于 2012-08-13T15:16:20.407 に答える
2

なぜあなたはこの厄介な文字列の連結すべてに悩まされているのですか?特定の出力が必要な場合は、クライアントでフォーマットします。可能な場合は、文字列の代わりに基本型を使用してください。

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-13T15:19:34.567 に答える
0

ステートメントでエイリアスを使用することはできません。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)

キャストと変換を参照してください

于 2012-08-13T15:18:09.027 に答える
0

MySQLでは、を使用して購入する日時列の日付を取得することもできます。この場合、なぜエイリアスbでグループ化するのかわかりません。ほとんどの場合、日付の値で注文することもできます。

SELECT DATE(PayDate) as a, COUNT(Amount) as b
FROM TABLE1
GROUP BY a
ORDER BY a
于 2012-08-13T15:19:42.273 に答える