2016-05-23 30 views
0

これは、誰かが助けることができたら私がしようとしていることをよりよく説明するかもしれません。SQLでピボットする2つの列を組み合わせる

これはクエリです。

select sb.col_nm + '.' + sb.col_r_nm as 'Combined', mt.vlu_cd, at.tmplt_id 
from templ_t at 
inner join aud_bat_t b on b.tmp_id = at.tmp_id 
inner join stats_dtl_t mt on mt.batch_id = b.batch_id 
inner join lg_clmn_t sb on sb.lg_col_id = mt.lg_col_id 
where at.tmplt_id = 6 
order by sb.col_nm + '.' + sb.col_r_nm, mt.vlu_cd, at.tmplt_id 

私は最初の2つの行にコミニュールがあり、今クエリーがどのようにリターンされているかがわかります。私が旋回したときに

**Combined   vlu_cd  tmplt_id** 
prc_crf.premium  4567   6 
prc_crf.premium  8574   6 
prc_crf.premium  4789   6 
prc_crf.sales  7777   6 
prc_crf.sales  5487   6 
prc_crf.sales  8888   6 
prc_crf.sales  9874   6 
lrt_lr_premium  7755   6 
lrt_lr_premium  4874   6 
lrt_lr_premium  9999   6 
ptr_pr_sales   5555   6 
ptr_pr_sales   3333   6 
ptr_pr_sales   6523   6 
ptr_pr_sales   1489   6 

だから私が欲しいのはデータだけで表示するには、次の場所を組み合わせたという列のすべての行は、行の下にリストされているそれぞれのvlu_cdで列になっているされています。

誰がではなく、手動でそれらを入力することで、すべての新しい列をピボットこのデータを旋回するようにクエリを支援することができますに。

申し訳ありませんが、これは混乱している場合、私は明確ではないです場合、私は、とても初心者ですあなたが私にそれをより良く説明しようと頼むならば。

上記の結果から、ピボットするときに手動で各行に入力する必要はありません。

prc_crf.premium prc_crf.sales lrt_lr_premium ptr_pr_sales 
4567    7777    7755   3333   
8574    5487    4874   6523 
4789    8888    9999   1489 
        9874    5555 
+0

Microsoft SQL Server Management Studio –

+0

PIVOTを調べましたか? https://technet.microsoft.com/en-us/library/ms177410%28v=sql.105%29.aspx – Alex

答えて

2
SELECT SUM(CASE WHEN stored_col_b.col_nm = 'jobs_t' AND stored_col_b.col_r_nm = 'job_id' THEN value_col_b.vlu_cd ELSE 0 END) AS [jobs_t.job_id] 
     ,SUM(CASE WHEN stored_col_b.col_nm = 'road_t' AND stored_col_b.col_r_nm = 'road_id' THEN value_col_b.vlu_cd ELSE 0 END) AS [road_t.road_id] 
FROM stored_col_b 
    INNER JOIN value_col_b 
     ON value_col_b.col_id = stored_col_b.col_id 

+0

個別に結合する各行を手動で入力せずにデータをピボットすることはできますか。現時点では私は2つだけですが、私はこれが何百になるので、これを手動で行うには非常に時間がかかるでしょう。 –

+0

@BHのように、値をコピーして '="、SUM(CASE WHENの場合はstored_col_b.col_nm = '"&A1&"' AND stored_col_b.col_r_nm = '"&B1'" THEN value_col_bのような式を使用します。 vlu_cd ELSE 0 END)AS ["&A1&"。 " &B1& "]" "しかし、何百もの列を持つクエリをどのように使用するのか分かりません。 – adrianm

+0

返事ありがとうございました。私の主な質問を編集しました。 –

1

を必要なときにこれは私が

ALTER PROCEDURE [dbo].[prc-Pivot] (@Select varchar(1000), 
    @PvotCol varchar(100), 
    @Summaries varchar(100), 
    @GroupBy varchar(100), 
    @OtherCols varchar(100) = Null) 
AS 

Set NoCount On 
Set Ansi_Warnings Off 

Declare @Vals varchar(max); 
Set @Vals = '' 
Set @OtherCols= IsNull(', ' + @OtherCols,'') 
Create Table #Temp (Pvot varchar(100)) 
Insert Into #temp 
Exec ('Select Distinct Convert(varchar(100),' + @PvotCol + ') as Pvot FROM (' + @Select + ') A') 
Select @Vals = @Vals + ', ' + Replace(Replace(@Summaries,'(','(CASE WHEN ' + @PvotCol + '=''' + Pvot + ''' THEN '),')[', ' END) As [' + Pvot) From #Temp Order by Pvot 
Drop Table #Temp 
Exec ('Select ' + @GroupBy + @OtherCols + @Vals + ' From (' + @Select + ') A Group By ' + @GroupBy + ' Order by 1,2') 
Set NoCount Off 
Set Ansi_Warnings on 

はオプションで遊ぶ気軽にピボットデータに使用AA小さな属である複数の列を追加します。

Exec [prc-Pivot] 'Select grpby=1,colstr=col_nm+''.''+col_r_nm,vlu_cd from aaa','colstr','sum(vlu_cd)[]','grpby' 

戻りました

grpby jobs_t.job_id road_t.road_id 
1  789    468 
関連する問題