2017-10-10 11 views
1

のために、私は以下のようにSQL Serverの動的なピボットクエリを作るために管理することができ、最後に合計列を追加します。は、動的ピボットSQL Serverクエリ

DECLARE @sql nvarchar(max), 
     @columns nvarchar(max) 

SELECT @columns = STUFF((SELECT DISTINCT ',' + QUOTENAME(nationality) 
         FROM NewComers 
         FOR XML PATH('')), 1, 1, '') 

SELECT @sql = 'SELECT p.registrationdate, '+ @columns + 
       ' FROM (SELECT s.registrationdate, s.Nationality FROM newcomers s) AS t 
       PIVOT (
        COUNT(Nationality) FOR nationality IN (' + @columns+ ')) p' 

EXEC (@sql) 

私の問題は、私はに列を追加したいということです結果の終わり。だから、現在、私はこの結果を得る:

registrationdate GER TUR CAN AUS 
------------------ ----- ----- ----- ----- 
    16/11/2016   10  8  6  7 
    21/08/2020   4  5  3  2 
    08/04/2019   1  3  5  0 

を、私は、結果としてこれを持っている必要があります:

registrationdate GER TUR CAN AUS Total 
------------------ ----- ----- ----- ----- ------- 
    16/11/2016   10  8  6  7  31 
    21/08/2020   4  5  3  2  14 
    08/04/2019   1  3  5  0  9 

私は、スタックオーバーフローのいくつかのソリューションを試みたが、私は何もかなり働きました。

はあなたの助けに感謝します:)

+0

実際のデータを写真に置き換えることはできますか? http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+1

リンクをありがとう。私は質問を編集しました。 – Hajir

答えて

0

あなたは変数あなた@columnsに「合計」の文字列を手動で追加し、あなたの新人テーブルとUNION句行として合計を追加し、することはできますか?

基本的に、あなたの日付でグループ分けされた組合を持つ新人のテーブルのCTEを作成し、合計を合計し、「合計」という単語を国籍の列に貼り付けます。

次に、@columns文字列にTotalを追加してピボットします。

これは何か?私は現在SQL Serverにアクセスしてテストしていません。

 
DECLARE @sql nvarchar(max), 
     @columns nvarchar(max) 

SELECT @columns = STUFF((SELECT DISTINCT ',' + QUOTENAME(nationality) 
         FROM NewComers 
         FOR XML PATH('')), 1, 1, '') 

SELECT @sql = ' 

;with CTE as (
select registrationdate, Nationality, count(Nationality) as Cnt from newcomers group by registrationdate, Nationality 
union all 
select registrationdate, ''Total'', count(Nationality) as Cnt from newcomers group by registrationdate 
) 

SELECT p.registrationdate, '+ @columns + ', Total' + 
       ' FROM (SELECT registrationdate, Nationality, Cnt FROM CTE) AS t 
       PIVOT (
        max(Cnt) FOR nationality IN (' + @columns+ ',Total)) p' 

EXEC (@sql) 
+0

ありがとうございます:)それは動作します。組合全体の後でのみ、「合計」を「合計」に変更する必要があります。 – Hajir

+0

良いキャッチ。または、2つの単一引用符も同様に機能します。一重引用符を別の一重引用符でエスケープすることができます。 – thomas

関連する問題