2016-05-04 8 views
1

私はSQLの専門家ではありません。私は以下のクエリを持っています。私がしたいのは、Statusを個々の列として移動し、別個の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

したがって、特定のActionTypeIDに関連付けられたすべての異なるActionIDの数をカウントしますか?特定のドライバーによって操作されている車両を取得しています。特定のドライバーに対して実行されたアクション数がカウントされています。だからあなたはただActionTypeIDを必要とします。合計の個別アクションは完了しましたか? – Dresden

+0

私はこのFelixをやろうとしましたが、ファイルをアップロードする方法を見つけるのに苦労しました。イメージがあれば十分です。元の投稿のリンクを使って動作するはずです。 –

答えて

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)は、列を受け取り、さまざまな名前を付けた外部セレクトへの入力になります。

関連する問題