うん、正しいタイトルを取得するだけで10分かかりました。いくつかの背景情報:私のテーブルには、複数のサーバーからのバックアップ結果が含まれています。簡単にするためにただ一つのサーバのためのいくつかの行:SQL Server:複数の列をピボット
hostname type_id result_id received
----------------------------------------
SBS2011 5 1 2016-06-28
SBS2011 5 1 2016-06-28
SBS2011 5 1 2016-06-29
SBS2011 5 1 2016-06-29
SBS2011 5 1 2016-06-30
SBS2011 6 1 2016-06-30
SBS2011 5 2 2016-07-01
SBS2011 6 2 2016-07-01
SBS2011 6 2 2016-07-01
SBS2011 5 1 2016-07-02
SBS2011 6 1 2016-07-02
SBS2011 5 1 2016-07-03
SBS2011 6 1 2016-07-03
SBS2011 5 1 2016-07-04
SBS2011 6 1 2016-07-04
PIVOTを使用するには、私は、各曜日のバックアップの量の概要を取得することができます
hostname 1 2 3 4 5 6 7
--------------------------------------
SBS2011 2 2 2 2 2 3 2
:中
select * from
(
select [hostname], [type_id], datepart(w, received) as workday from [backups]
) TEMP
pivot (
count([type_id])
for workday in
([1], [2], [3], [4], [5], [6], [7])
) as pvt;
結果しかし、この結果はいくつかの重要な情報を欠場する。 result_idには、「成功」を等しくし、result_idには等しく「失敗した」として、私はこのように見える結果を持っているしたいと思います:
hostname 1:1 1:2 2:1 2:2 3:1 3:2 4:1 4:2 5:1 5:2 6:1 6:2 7:1 7:2
-------------------------------------------------------------------
SBS2011 2 0 2 0 2 0 2 0 2 0 0 3 2 0
ColumnNameに1
:1は日曜日の省略形です:成功と1:2の日曜日に等しいです:失敗しました。いくつかのバックアップのtype_idには、sunday:retryの列1:3もあります。
私が見たように、ダイナミックピボットがこのパズルを解く鍵となることがわかりました。他はPARTITION BYを提案していますが、私はまだどのように発見していません。ダイナミックピボットは最も有望なようですが、私はどのように分かりません。これを作成するのを手伝ってください - 私にとっては複雑な - クエリですか?
はい、type_idの1〜4もホストによって異なります。これらの2つのresult_idもありますが、拡張するのは難しいはずはありません。実行に失敗したバックアップは、本当に別の質問と別のクエリです。今のところ私は異なるtype_idの合計に固執するでしょう。総額が他の日よりも少ない場合、何かが間違っていました。 – mokum
Type_idは、ソースソフトウェアとバックアップタイプを表します。 Type_id = 1はたとえばAcronis VMprotect、type_id = 2はAcronis VMprotectデュアルデスティネーション、type_id = 3はSymantec BackupExecなどと等しくなります – mokum