2013-06-15 6 views
0

У меня есть ниже таблица:Как преобразовать строку в столбцы?

PROCESS ID  VOUCHER DATE  CATEGORY_ID  PROJECT  AMOUNT 
    -----------  ------------ ------------  -------  ------- 
    1001    12/03/13   Miscellaneous pnr   1000 
    1001    12/03/13   Miscellaneous pjk   2000 
    1002    20/07/13   Local Travel pnr   3000 
    1002    20/07/13   Local Travel npk   3400 
    1003    29/09/14   Miscellaneous jpg   1000 
    1004    23/10/13   Local Travel pnr   2000 
    1005    24/10/13   Miscellaneous pnr   1000 
    1005    24/10/13   Local Travel pnr   1000 

В интерфейсе я дам Ваучера ДАТЫ, как между некоторой датой, например, 20/01/13 и 27/10/13, и я должен получить выход, как в приведенном ниже формате:

CATEGORY_ID  pnr   npk   jpg 
    -----------  -----  -----  -----  
    Miscellaneous 1000   0   1000 
    Local Travel  6000   3400  0 

ПРОЕКТ является динамическим, он может варьироваться.

ответ

1

Попробуйте это, работает в SQL Server 2008:

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

SELECT @cols = STUFF((SELECT ',' + PROJECT 
        FROM (SELECT DISTINCT PROJECT FROM Table1)sub 
        FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 


SET @query = 'SELECT * FROM 
       (
       SELECT CATEGORY_ID, PROJECT, AMOUNT 
       FROM Table1 
       --WHERE VOUCHER_DATE BETWEEN '' AND '' 
       ) AS T1 
       PIVOT (SUM(AMOUNT) FOR PROJECT IN ('[email protected]+')) AS T2 

' 
EXEC(@query) 

SQL Fiddle

В принципе, вы используете динамический SQL для установки списка проектов, поскольку он может меняться, а затем PIVOT, как обычно, я прокомментировал критерии даты ваучера, потому что даты выборки были не в надлежащем формате. Если некоторые проекты полностью исключены из требования даты, то вы также добавите критерии даты в верхнюю часть, которая устанавливает список проектов.

+0

Большое вам спасибо. Спасибо. Many.fingers перешли – SarathSprakash

+0

, как это сделать с файлами .sdf с использованием SqlCe-соединения, поскольку они не могут содержать поддержку процедуры – SarathSprakash

+0

Я не знаком с ограничениями SQLCE, посмотрю, когда у меня есть время. –

0

Если число значений для столбца проекта известны, и они также мало, вы можете попробовать это:

select category_id 
    ,sum(case when project='pnr' then amount else 0. end) as pnr 
    ,sum(case when project='npk' then amount else 0. end) as npk 
    ,sum(case when project='jpg' then amount else 0. end) as jpg 
from [yourtable] 
where [voucher date] between @bd and @[email protected] and @ed are the input interval 
group by category_id 

или играть с командой поворота

Благодаря

+0

, за кого вы благодарите? – Brian

+0

Спасибо за ваш ответ, значения столбца проекта неизвестны. Это невозможно. – SarathSprakash

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