ホームページ  >  記事  >  バックエンド開発  >  頻繁に使用されるクロス集計の問題では、通常、動的 SQL を使用して動的列を生成できます。 _PHP チュートリアル

頻繁に使用されるクロス集計の問題では、通常、動的 SQL を使用して動的列を生成できます。 _PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:00:35895ブラウズ

元のテーブルは次のとおりです。 lClass calldate callcount
1 2005-8-8 40
1 2005-8-7 6
2 2005-8-8 77
3 2005-8-9 33
3
-8-8 9
3 2005-8-7 21
Classの値に従って、CallCount1、CallCount2、CallCount3を日付ごとにカウントします。
この日付のレコードがない場合、値は0です
次の形式にマージする必要があります:
CallDate CallCount1 CallCount2 CallCount3
2005-8-9 0 0 33
2005-8-8 40 77 9
2005- 8 -7 6 0 21
--テスト環境を作成
テーブルT(Class varchar(2),CallDate datetime, CallCount int)を作成
T select '1','2005-8-8',40
unionに挿入すべて選択 '1'、'2005 -8-7'、6
結合 すべて選択 '2'、'2005-8-8'、77
結合 すべて選択 '3'、'2005-8-9'、33
Union all select '3',' 2005-8-8',9
union all select '3','2005-8-7',21
--動的 SQL
declare @s varchar(8000)
set @s ='select CallDate '
select @ s=@s ',[CallCount' Class ']=sum(case when Class=''' Class ''' then CallCount else 0 end)'
from T
クラスごとにグループ化
set @s=@s ' from T group by CallDate order by CallDate desc '
exec(@s)
--result
CallDate CallCount1 CallCount2 CallCount3
------------------ -------- ---------------------------- ---------- ---- ------ -----------
2005-08-09 00:00:00.000 0 0 33
2005-08-08 00:00:00.000 40 77 9
2005-08- 07 00:00:00.000 6 0 21
--テスト環境を削除
テーブル T を削除


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/631231.html技術記事元のテーブルの形式は次のとおりです。 Class CallDate CallCount 1 2005-8-8 40 1 2005-8-7 6 2 2005-8-8 77 3 2005-8-9 33 3 2005-8-8 9 3 2005-8 -7 21 Class の値に従って、CallC が日付によって計算されます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。