2015-09-02 3 views
1

Я использую SQL Server, и мне нужно отобразить информацию по запросу по столбцам. На данный момент, информация отображается как:Отображать столбцы в строках

ProjectID FiscYr Period Amt 
4231  2015 1  100 
4231  2015 1  820 
***   *** ***  *** 
***   *** ***  *** 
4231  2015 12  733 

должен быть отформатирован как:

ProjectID FiscYr Period 01 Period 02 *** *** Period 12 
4231  2015   100   820 *** *** 733 

существующего запроса:

SELECT  substring([project],11,4) as ProjectID 
       ,substring([fiscalno],1,4) as FiscYr 
       ,substring([fiscalno],5,2) as Period 
       ,sum([amount]) as Amt 
FROM [dbo].[PJTran] 
WHERE (((pjtran.gl_Acct) Like '12%' or (pjtran.gl_Acct) Like '13%')) 
group by substring([project],11,4),substring(fiscalno,1,4),substring([fiscalno],5,2); 
+1

Возможный дубликат [Эффективное преобразование строк в столбцы в sql-сервере] (http://stackoverflow.com/questions/15745042/efficiently-convert-rows-to-columns-in-sql-server) – jpw

+0

Форматировать табличные данные в виде таблиц , отметьте его и используйте 'ctrl + k' – jpw

ответ

1

Wrap запрос в общем табличном выражении, а затем применить Оператор pivot:

WITH CTE AS (
    SELECT   
     SUBSTRING([project],11,4) AS ProjectID 
     , SUBSTRING([fiscalno],1,4) AS FiscYr 
     ,'Period ' + SUBSTRING([fiscalno],5,2) AS Period 
     , Amount 
    FROM [dbo].[PJTran] 
    WHERE pjtran.gl_Acct LIKE '1[23]%' 
) 

SELECT * FROM CTE 
PIVOT (SUM(Amount) FOR Period IN (
    [Period 1],[Period 2], [Period 3], [Period 4], 
    [Period 5],[Period 6], [Period 7], [Period 8], 
    [Period 9],[Period 10],[Period 11],[Period 12] 
    ) 
) p; 
+0

Большое вам спасибо. Это сработало. – enigma6205

Смежные вопросы