地域、地区、およびクライアントが列A、B、Cに設定されたテーブルが作成されるクエリの開発が割り当てられました。残りの列にキャンペーン名が列ヘッダー(行1)として表示されます。管理者は、ピボットテーブルの本体にある連絡先名と連絡先の両方を必要とします。このように:複数のサブクエリと行「ヘッダー」を持つSQL Server 2012動的ピボットテーブル - これを行うことはできますか?
Region |District |ClientID |Campaign1 |Campaign2 |Campaign3
========|===========|===========|===========|===========|===========
1 |A |830 | NULL | NULL | NULL
========|===========|===========|===========|===========|===========
1 |A |832 |Name One | NULL |Name One
| | |Date | |Date
========|===========|===========|===========|===========|===========
1 |A |833 | NULL | NULL | NULL
========|===========|===========|===========|===========|===========
1 |A |834 | NULL | NULL | NULL
========|===========|===========|===========|===========|===========
1 |A |837 |Name Two | NULL | NULL
| | |Date | |
========|===========|===========|===========|===========|===========
1 |A |841 | NULL | NULL | NULL
========|===========|===========|===========|===========|===========
2 |K |262 | NULL | NULL | NULL
========|===========|===========|===========|===========|===========
2 |L |266 | NULL | NULL | NULL
| | | | |
========|===========|===========|===========|===========|===========
私はこのポジションで新しいです。私はSQL Serverの初心者レベルです。私はSQL Server 2012の機能の限界についてはわかりません。
|ClientID |Campaign1 |Campaign2 |Campaign3 |Campaign4 |
|===========|===========|===========|===========|===========|
|830 | NULL | NULL | NULL | NULL |
|===========|===========|===========|===========|===========|
|832 |Name One | NULL |Name One |Name One |
|===========|===========|===========|===========|===========|
|833 | NULL | NULL | NULL | NULL |
|===========|===========|===========|===========|===========|
|834 | NULL | NULL | NULL | NULL |
|===========|===========|===========|===========|===========|
|837 |Name Two | NULL | NULL | NULL |
|===========|===========|===========|===========|===========|
|841 | NULL | NULL | NULL | NULL |
|===========|===========|===========|===========|===========|
|262 | NULL | NULL | NULL | NULL |
|===========|===========|===========|===========|===========|
|266 | NULL | NULL | NULL |Name Six |
|===========|===========|===========|===========|===========|
現在のクエリを::
はこれまでのところ、私はそれを次のクエリから、これらの結果を得ることができました
IF Object_ID('tempdb.dbo.#temp') is not null
drop table dbo.#temp
SELECT *
INTO #temp
FROM
(
SELECT MC.Region,MC.District,MS.ClientID,ML.CampaignName,MCL.ContactName
FROM MnfstClient MC
LEFT JOIN ManifestSummary MS on MC.ClientID=MS.ClientID
LEFT JOIN MnfstList ML on ML.FileDetailID=MS.FileID
and MS.ControlGroupFlag=0
LEFT JOIN MnfstClientList MCL on MS.ClientID=MCL.ClientID
and ML.ListID=MCL.ListID
WHERE ML.InHomeDate Between '2016-04-01' and '2017-03-31'
GROUP By MC.Region,MC.District,MS.ClientID,ML.CampaignName,MCL.ContactName) A
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.CampaignName)
FROM #temp c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query = 'SELECT ClientID, ' + @cols + ' from
(
SELECT
Region
,District
,ClientID
,ContactName
,CampaignName
FROM #temp
) x
PIVOT
(
max(ContactName)
for CampaignName in (' + @cols + ')
) p '
EXECUTE(@query)
私は 'を実行したときにここで#TEMPに何があるかです声明「INTO SELECT:
+--------+----------+----------+--------------+-------------+-------+
| Region | District | ClientID | CampaignName | ContactName | Date |
+--------+----------+----------+--------------+-------------+-------+
| 1 | A | 830 | Campaign1 | null | Date |
| 1 | A | 830 | Campaign2 | null | Date |
| 1 | A | 830 | Campaign3 | null | Date |
| 1 | A | 832 | Campaign1 | Name One | Date |
| 1 | A | 832 | Campaign2 | null | Date |
| 1 | A | 832 | Campaign3 | Name One | Date |
| 1 | A | 833 | Campaign1 | null | Date |
| 1 | A | 833 | Campaign2 | null | Date |
| 1 | A | 833 | Campaign3 | null | Date |
| 1 | A | 834 | Campaign1 | null | Date |
| 1 | A | 834 | Campaign2 | null | Date |
| 1 | A | 834 | Campaign3 | null | Date |
| 1 | A | 837 | Campaign1 | Name Two | Date |
| 1 | A | 837 | Campaign2 | null | Date |
| 1 | A | 837 | Campaign3 | null | Date |
| 1 | A | 841 | Campaign1 | null | Date |
| 1 | A | 841 | Campaign2 | null | Date |
| 1 | A | 841 | Campaign3 | null | Date |
| 2 | K | 262 | Campaign1 | null | Date |
| 2 | K | 841 | Campaign2 | null | Date |
| 2 | K | 841 | Campaign3 | null | Date |
| 2 | L | 841 | Campaign1 | null | Date |
| 2 | L | 841 | Campaign2 | null | Date |
| 2 | L | 841 | Campaign3 | null | Date |
+--------+----------+----------+--------------+-------------+-------+
だから、あなたはそれを持っています。クエリ結果を希望どおりに表示できない場合は、クエリを実行し、結果をExcelにリージョン、地域、クライアントのテーブルとともにダンプし、VLOOKUPを使用する必要があります。エンドユーザーはそれを行うことはできません。したがって、毎週クエリを実行してExcelの変更を加えるのは私の仕事です。 (そして、私のために、仕事=悪い)
それでは、答えは何ですか?所望のピボットの複雑さを達成できるか?
ありがとうございました!
「#temp」のデータはどのようなものになりますか?いくつかのサンプルのデータを見ることなく、最終結果を得ることは難しいでしょう。また、動的SQLバージョンに取り組む前に、これをハードコーディングされたバージョンとして記述してみてください。 – Taryn
ありがとう、bluefeet。 元の質問のクエリの後に#tempのデータを追加しました。 (私はstackoverflowにも新しいことを教えていただけますか?何が必要なのか、どのように見た目を実現するのか分かりません) –