如果有人可以提供帮助,这可以更好地解释我想要做的事情。
这是查询。
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
所以我想要的是当我转动数据时只是显示以下内容,其中名为Combined的列中的所有行都成为列,其中每行列在行中的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 :(得分: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
在需要时添加更多列
答案 1 :(得分:1)
这是一个用于转动数据的小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