2016-05-13 2 views
0

Каждый месяц мы забудем виджеты. Мы строим красные, зеленые и синие виджеты. Как написать запрос, в котором указано количество виджетов, созданных для каждого цвета по месяцам? Я хотел бы, чтобы результаты представляли собой диаграмму с осью y, обозначенной красным, зеленым, синим и осью x, отмеченными значком Ян, февраль, март и т. Д.Как отделить результаты запроса от столбцов, где представлены данные из каждого месяца?

Номер года не имеет значения, и мне бы хотелось, чтобы результаты запроса как показано ниже. Дата создания виджета является частью доступных данных (с 04/02/2016). Я надеюсь, что я смогу использовать datepart, чтобы вытащить месяц, но я хочу, чтобы он группировался в столбцы, а не в строки. Пожалуйста помоги?

Example

+0

Вы должны признать, с PIVOT. –

+0

@NikolayFedorov спасибо. Сводка - хорошая подсказка. Я нашел это (http://stackoverflow.com/questions/15931607/convert-rows-to-columns-using-pivot-in-sql-server), но мне все еще нужно больше советов. Не знаете, что с этим делать. – bteague

ответ

1

Используйте этот код:

IF OBJECT_ID('tempdb..#UsingColor','U') IS NOT NULL DROP TABLE #UsingColor; 

CREATE TABLE #UsingColor 
(color VARCHAR(10) NOT NULL 
, usingDate DATE NOT NULL) 


INSERT INTO #UsingColor(color, usingDate) 
VALUES('red', '20160101') 
, ('green', '20160101') 
, ('blue', '20160201') 
, ('red','20160201') 
, ('red', '20160301') 
, ('green', '20160301') 
, ('blue', '20160301') 
, ('orange','20160301') 
, ('green', '20160401') 
, ('green', '20160401') 
, ('blue', '20160401') 
, ('orange','20160401') 
, ('blue', '20160401') 
, ('green', '20160401') 
, ('white', '20160401') 
, ('orange','20160401') 
, ('green', '20160501') 
, ('white', '20160501') 
, ('orange','20160601') 
, ('white', '20160601') 
, ('orange','20160601') 
, ('green', '20160701') 
, ('blue', '20160701') 
, ('red','20160701') 
, ('red', '20160801') 
, ('green', '20160801') 
, ('blue', '20160801') 
, ('orange','20160801') 
, ('green', '20160901') 
, ('green', '20160901') 
, ('blue', '20160901') 
, ('orange','20160901') 
, ('blue', '20160901') 
, ('green', '20160901') 
, ('white', '20160901') 
, ('orange','20160901') 
, ('green', '20161001') 
, ('white', '20161001') 
, ('orange','20161101') 
, ('white', '20161101') 
, ('orange','20161101') 
--, ('black', '20161201') 


SELECT color 
    , [1] AS Jan 
    , [2] AS Feb 
    , [3] AS Mar 
    , [4] AS Apr 
    , [5] AS May 
    , [6] AS Jun 
    , [7] AS Jul 
    , [8] AS Aug 
    , [9] AS Sep 
    , [10] AS Oct 
    , [11] AS Nov 
    , [12] AS Dec 
FROM(
SELECT color, 1 AS cntr, MONTH(usingDate) AS m FROM #UsingColor) AS D 
PIVOT(COUNT(cntr) FOR m IN([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])) AS P 
Смежные вопросы