-1

MySql に MonthlySubscriber のテーブルが 1 つあります。

CREATE TABLE  MonthlySubscriber (
 MobileNo varchar(20) NOT NULL,
 Month int(11) NOT NULL,
 PRIMARY KEY (MobileNo, Month)
 );

1 つのモバイル番号は、1 か月以上に複数回来ることはできません。モバイルによると、テーブルに参加する必要はありません。

要件:

私は自分のテーブルに自分で参加したいのですが、最初のテーブルからは MobileNo と Month のみ、2 番目のテーブルからは月だけが必要です。両方の列 (最初のテーブルの月と 2 番目のテーブルの月) の順序とグループ化を使用して (最初のテーブルのすべての mobileNo と月と 2 番目のテーブルの月の数) が必要です。

私のMySqlクエリ:

 Select COUNT(t.MSI), t.Mon1 ,t.Mon2 from
 ( SELECT
     MonthlySubscriber.MobileNo as MSI,
     MonthlySubscriber.Month as Mon1,
     MonthlySubscriber.Month as Mon2
   FROM MonthlySubscriber as MonthlySubscriber
   LEFT JOIN MonthlySubscriber as MonthlySubscriber on
         (MonthlySubscriber.MobileNo = MonthlySubscriber.MobileNo )
   ORDER by MonthlySubscriber.Month
 )
 t GROUP BY t.Mon1, t.Mon2;

Hibernate 基準クエリでまったく同じクエリが必要です。

テーブル

> MobileNo  || Month 
> 852335421 || 1 
> 852335421 || 2 
> 852335421 || 5
> 994534554 || 3 
> 924443443 || 4 
> 994534554 || 7
> 864645353 || 1
result should come like this
>count_of_mobileNos || month 1 || month 2
>   2               ||  1       || 1
>   1               ||  1       || 2
>   1               ||  1       || 5
>   1               ||  2       || 2
>   1               ||  2       || 5
>   1               ||  3       || 3
>   1               ||  3       || 7
>   1               ||  4       || 4
>   1               ||  5       || 5
>   1               ||  7       || 7

月は 1 ~ 12 の整数であることに注意してください

4

1 に答える 1

0

これを試して:

SELECT count(MobileNo),
count( case when m.Month=1 then m.Month else 0 end ) as Month 1,
count( case when m.Month=2 then m.Month else 0 end ) as Month 2,
count( case when m.Month=3 then m.Month else 0 end ) as Month 3,
.
.
.
count( case when m.Month=12 then m.Month else 0 end ) as Month 12
FROM MonthlySubscriber m
GROUP BY m.Month
于 2013-07-24T02:00:02.517 に答える