1

SQL クエリで解決しなければならない複雑な問題があります。ユーザーがその年の各月に実行したアクションの数を表す数値を示すレポートを生成する必要があります。たとえば、User1 が指定されたアクションを 1 月と 7 月に実行した場合、クエリは、'January' と 'July' という名前の列に数字 1 を返し、他の月を表す列に 0 を返す必要があります。データを取得しているテーブルには、特定のアクションが実行された日時を含む列が 1 つしかありません (これは、この特定の問題に関連する唯一の列です)。特定の期間の各ユーザーについてこの情報を返す SQL クエリを作成する必要があります。助けてください。さらに情報が必要な場合はお知らせください。提供します。ありがとう

結果の構造は次のようになります: User Jan Feb ..... Dec UID 1 0 1

選択した期間に表示されるすべてのユーザーにこれが必要です。私のアプリケーションは SQL Server 2005 を使用しています。

4

3 に答える 3

2
select  datepart(month, dateColumn) as Month
,       count(*) as NumberOfActions
from    Actions
group by
        datepart(month, dateColumn)
于 2012-12-13T10:30:59.393 に答える
0

上記のクエリは正しいですが、これは月の数値のみを返します。

私は次のことをします。

SELECT  dateparth(month, dateColumn) as Month, count(*) as NumberOfActions
FROM Actions
GROUP BY Month

次に、(php を使用している場合) mktime() および date() 関数を検討します。このような:

/* The year doesn't matter. we are just trying to format this in to a date */
    $date = mktime(0, 0, 0, $row->Month, 1, 2012); 

/* This will display 'Jan, Feb, Mar ...' respectively */
    $dateText = date('M', $date); 

別の言語を使用している場合は、代わりの言語をグーグルで検索してください。同じ原則になります..構文が異なるだけです。

お役に立てれば。

于 2012-12-13T10:46:50.000 に答える
0

これはデータを行で返しますが、OPは実際には列でそれを要求していると思います。PIVOTこれには、このようなステートメントが必要になります...

仮定すると...

Create Table TestPivot (UserName Varchar(10), DateColumn DateTime);

それで...

Select *
  From (Select UserName, DateName(Month, DateColumn) As Month_Name, Count(*) As Month_Count
          From TestPivot
         Group By UserName, DateName(Month, DateColumn)) As SourcePart
  Pivot (Sum(Month_Count)
         For Month_Name In (January, February, March, April, May, June, 
                            July, August, September, October, November, December)) As PivotPart
于 2012-12-13T10:56:32.480 に答える