2016-05-23 64 views
0

这可能会更好地解释我想要做什么,如果任何人都可以提供帮助。在SQL中旋转结合两列

这是查询。

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 

因此,我有前两行分支,现在查询返回的是例如。

**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

反正我有可以透视的数据,而不在每一行手动键入单独结合起来。目前,我只有两个,但是随着我的进行,这将会有数百个,因此手动完成这个过程非常耗时。 –

+0

@BH,我想的值复制到Excel和使用公式像'=”,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

时添加更多的列这是AA小SP,我使用的枢轴数据

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 

您可以随意选择玩:

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

Retrurns

grpby jobs_t.job_id road_t.road_id 
1  789    468