2016-05-09 4 views
0

У нас есть таблица, показывающая суммы (CHGCNT) на 3 даты (5-9-2016, 5-10-2016, 5-11-2016) для каждого магазина & Депты.SQL Server Row В колонку

enter image description here

Я хочу, чтобы иметь возможность просмотреть записи в таблице, как это:

enter image description here

я уже применил следующий запрос

declare @dt as datetime 
 
declare @dt1 as varchar(10) 
 
declare @dt2 as varchar(10) 
 
declare @dt3 as varchar(10) 
 
select distinct @dt = min(effdt) from [HQExtract].[dbo].[FSM_PRICE_TAGCOUNT] 
 
-- print CONVERT(CHAR(10), @dt, 110) + ' ---- ' + CONVERT(CHAR(10), @dt+1 , 110) 
 

 
set @dt1 = CONVERT(CHAR(10), @dt, 110) 
 
set @dt2 = CONVERT(CHAR(10), @dt +1 , 110) 
 
set @dt3 = CONVERT(CHAR(10), @dt + 2 , 110) 
 

 
--print @dt1 + ' ---- ' + @dt2 + '-----' + @dt3 
 

 

 

 
SELECT DEPTNM, DEPT, [@dt1] , [@dt2] , [@dt3] 
 
FROM [HQExtract].[dbo].[FSM_PRICE_TAGCOUNT] 
 
PIVOT 
 
(
 
     SUM(CHGCNT) 
 
     FOR effdt IN ([@dt1] , [@dt2] , [@dt3]) 
 
) AS P
но он возвращает даты enter image description here

+0

Вы не должны жесткий код ваши столбцы, которые вы поворотный мимо. Вы должны выяснить их динамически. Просто google SQL pivot, и вы должны найти подходящий ответ. – PyNoob

+0

похоже: http://stackoverflow.com/questions/37051655/sqlserver-table-row-to-column-data/37054088#37054088 –

ответ

0

Мне нравится SUM-СЛУЧАЙ подход:

SELECT deptnm, 
SUM(CASE WHEN effdt = '2016-05-09' THEN chgcnt ELSE 0 END) "2016-05-09", 
SUM(CASE WHEN effdt = '2016-05-10' THEN chgcnt ELSE 0 END) "2016-05-10", 
SUM(CASE WHEN effdt = '2016-05-11' THEN chgcnt ELSE 0 END) "2016-05-11", 
SUM(effdt) Total 
FROM [HQExtract].[dbo].[FSM_PRICE_TAGCOUNT] 
GROUP BY deptnm; 
+0

Конечно, мой ответ помогает только в конкретном случае, о котором вы упоминаете. ;) –

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