2016-05-04 3 views
1

Я не специалист по SQL. У меня есть следующий запрос: я хотел бы переместить статус как отдельный столбец и подсчитать отдельный actionid.Сводные случаи в заголовках столбцов

Action ID Sample image

Запрос:

SELECT 
CONVERT (Date,[ActionTime],103) AS DATE, 
COUNT(DISTINCT ActionID) AS Actions, 
VehicleID AS VehicleID, 
DriverID AS DriverID, 
    CASE 
    WHEN ActionTypeID = 7 THEN 'Not Suitable' 
    WHEN ActionTypeID = 8 THEN 'Job Acknowledged' 
    WHEN ActionTypeID = 9 THEN 'Job Accepted' 
    WHEN ActionTypeID = 10 THEN 'Job Rejected' 
    WHEN ActionTypeID = 12 THEN 'Job Recall' 
    WHEN ActionTypeID = 66 THEN 'Child Fleet Logon' 
    WHEN ActionTypeID = 67 THEN 'Child Fleet Logoff' 
    ELSE '' END AS Status 

FROM [TaxiHistory].[dbo].[Actions] 
WHERE actiontime between '2016-02-01 00:00:00' AND '2016-02-02 23:59:59' 
    AND ActiontypeID IN (7,8,9,10,12,66,67) 

    GROUP BY CONVERT (Date,[ActionTime],103), 
CASE 
    WHEN ActionTypeID = 7 THEN 'Not Suitable' 
    WHEN ActionTypeID = 8 THEN 'Job Acknowledged' 
    WHEN ActionTypeID = 9 THEN 'Job Accepted' 
    WHEN ActionTypeID = 10 THEN 'Job Rejected' 
    WHEN ActionTypeID = 12 THEN 'Job Recall' 
    WHEN ActionTypeID = 66 THEN 'Child Fleet Logon' 
    WHEN ActionTypeID = 67 THEN 'Child Fleet Logoff' 
    ELSE '' END, 
VehicleID, 
DriverID 
+0

Пожалуйста, разместите образец данных и ожидаемый результат. –

+0

Итак, вы хотите подсчитать количество разных ActionID, связанных с определенным идентификатором ActionTypeID? Вы получаете транспортное средство, которое управляется конкретным водителем с подсчетом количества действий, выполненных для этого автомобиля с установленным статусом для всего, я предполагаю, претендую или файл. Так что вы просто хотите ActionTypeID | Выполнены полные действия? – Dresden

+0

Я пытался сделать это Феликс, изо всех сил пытался найти, как загрузить файл, так что, надеюсь, изображения будет достаточно, он должен работать, используя ссылку в исходном сообщении. –

ответ

0

Я думаю, что это то, что вы пытаетесь сделать.

SELECT CONVERT (DATE,[ActionTime],103) AS [Date], 
     VehicleID AS VehicleID, 
     DriverID AS DriverID, 
     COUNT(CASE WHEN ActionTypeID = 7 THEN 1 END) AS [Not Suitable], 
     COUNT(CASE WHEN ActionTypeID = 8 THEN 1 END) AS [Job Acknowledged], 
     COUNT(CASE WHEN ActionTypeID = 9 THEN 1 END) AS [Job Accepted], 
     COUNT(CASE WHEN ActionTypeID = 10 THEN 1 END) AS [Job Rejected], 
     COUNT(CASE WHEN ActionTypeID = 12 THEN 1 END) AS [Job Recall], 
     COUNT(CASE WHEN ActionTypeID = 66 THEN 1 END) AS [Child Fleet Logon], 
     COUNT(CASE WHEN ActionTypeID = 67 THEN 1 END) AS [Child Fleet Logoff] 
FROM [TaxiHistory].[dbo].[Actions] 
WHERE actiontime BETWEEN '2016-02-01 00:00:00' 
        AND  '2016-02-02 23:59:59' 
     AND ActiontypeID IN (7,8,9,10,12,66,67) 
GROUP BY CONVERT (DATE,[ActionTime],103), 
     VehicleID, 
     DriverID 
+0

Спасибо JamieD77 –

0
select 
    CONVERT (Date,[ActionTime],103) AS DATE, 
    COUNT(DISTINCT ActionID) AS Actions, 
    VehicleID AS VehicleID, 
    DriverID AS DriverID, 
    [7] 'Not Suitable', 
    [8] 'Job Acknowleged', 
    [9] 'Job Accepted', 
    [10] 'Job Rejected', 
    [12] 'Job Recall', 
    [66] 'Child Freet Logon', 
    [67] 'Child Fleet Logoff' 
(
    select ActionTime, VehicleId, DriverId, ActionTypeId, count(*) as TotalType 
    FROM [TaxiHistory].[dbo].[Actions] 
    WHERE actiontime between '2016-02-01 00:00:00' AND '2016-02-02 23:59:59' 
     AND ActiontypeID IN (7,8,9,10,12,66,67) 
    group by ActionTime, VehicleId, DriverId, ActionTypeId 
pivot(sum(TotalType) for ActionTypeId in ([7],[8],[9],[10],[12], [66], [67])) 
) p 

Внутренний запрос является основным, который получает количество действий для каждого ActionTime, автомобиль, Deiver и ActionType. PIVOT в конце этого в основном говорит для каждого из перечисленных в ActionTypeId сумм TotalType и помещает в столбец в результирующем наборе имя значения ActionTypeId. Этот набор результатов (p в запросе) представляет собой вход для внешнего выбора, который принимает столбцы и помещает в них различные имена.

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