2016-06-27 3 views
0

У меня есть эта задача, пытающаяся создать результат для этого образца кода, например, на рис. Тестовый код, который я приложил, но частично, мне нужна только одна линия для Запада, Юга ... и затем счет в каждом ведре. возможно с TSQL 2012 Tx Sample of input output click hereTSQL; Способ поворота результатов с агрегацией

WITH cte AS (SELECT 'WEST' Side, '2015-1-1' DD, 1 Status UNION ALL 
    SELECT 'WEST' Side, '2015-1-1' DD, 2 Status UNION ALL 
SELECT 'WEST' Side, '2015-1-1' DD, 2 Status UNION ALL 
SELECT 'WEST' Side, '2015-1-1' DD, 3 Status UNION ALL 
SELECT 'WEST' Side, '2015-1-1' DD, 3 Status UNION ALL 
SELECT 'WEST' Side, '2015-1-1' DD, 3 Status UNION ALL 
    SELECT 'South' Side, '2015-1-1' DD, 3 Status ) 
    --SELECT * FROM cte 

SELECT side, 
    case when Status= 1 then sum(1) else sum(0) end Complete, 
    case when Status= 2 then sum(1) else sum(0) end Cancel, 
    case when Status= 3 then sum(1) else sum(0) end Future 
    -- COUNT(*) TotalCC 
    FROM cte 
GROUP BY Side, Status 
ORDER BY 1 
+0

После просмотра вашего изображения, если это результат, на который вы нацеливаетесь, я не думаю, что вам нужен оператор PIVOT. То, что вы сделали выше (минус столбец DD), было бы лучшим решением, о котором я мог думать. – DVT

ответ

0
Будет ли эта работа

ли это?

WITH PivotData AS 
(
    SELECT 
     Side 
     , 1 AS agg_col 
     , StatusOfSide 
    FROM 
     <table_name> 
) 

SELECT 
    Side 
    , [1] AS Complete 
    , [2] AS Cancel 
    , [3] AS Future 
FROM 
    PivotData 
    PIVOT (COUNT(agg_col) FOR StatusOfSide IN ([1], [2],[3])) p;