2016-05-23 2 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

Это аа небольшой зр я использую для данных шарнирных

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' 

Возврат

grpby jobs_t.job_id road_t.road_id 
1  789    468 
Смежные вопросы