2017-10-13 6 views
1

クライアントあたりの総所要時間をhh:mmで取得しようとしています。 ここに私の質問です:クライアントあたりの合計所要時間

SELECT 
    CONVERT(VARCHAR(10), 
      SUM(DATEDIFF(Minute, startdate,EndDate)/60) 
       OVER (PARTITION BY clientId ORDER BY clientId)) 
     + '.' 
     + RIGHT('00' + CONVERT(VARCHAR(2), 
      SUM(DATEDIFF(Minute, startdate, EndDate)) % 60), 2) 
       (OVER(PARTITION BY clientId ORDER BY clientId))       
FROM tableX 
+0

問題は何ですか? –

答えて

0

SELECT 
    CONVERT(VARCHAR(10), 
      CAST(SUM(DATEDIFF(Minute, startdate,EndDate)/60) 
       OVER (PARTITION BY clientId ORDER BY clientId)) AS VARCHAR(2)) 
     + '.' 
     + RIGHT('00' + CONVERT(VARCHAR(2), 
      SUM(DATEDIFF(Minute, startdate, EndDate)) % 60), 2) 
       (OVER(PARTITION BY clientId ORDER BY clientId))       
FROM tableX; 

そうでない場合は、あなたが取得している:

メッセージ245、レベル16、状態1、行6 をvarchar値 '。'に変換すると変換に失敗しました。データ型intに変換します。 intdate type precedence大きいがあり、エンジンがSUM+)の値に順番に.intに変換しようとしている あるためだ

。 3番目の引数はすでにRIGHT関数を使用しているので文字列であるため、キャストする必要はありません。


あなたはこれを試みることができる:

SELECT CONVERT(VARCHAR(10), SUM(DATEDIFF(Minute, startdate,EndDate)) OVER (PARTITION BY clientId ORDER BY clientId)/60) 
     + '.' 
     + RIGHT('00' + CONVERT(VARCHAR(2), SUM(DATEDIFF(Minute, startdate, EndDate)) OVER(PARTITION BY clientId ORDER BY clientId) % 60), 2)           
FROM tableX 
0

あなたはそれを使用することができます。

あなたが文字列に時間の最初の部分をキャストする必要が
SELECT 
    clientId, 
    CONVERT(varchar(5), DATEADD(MINUTE, SUM(DATEDIFF(Minute, startdate,EndDate)) OVER(PARTITION BY clientId), '00:00') ,108) 
FROM tableX 
+0

個々のレコードに対して機能します。私はPARTITION BY clientIdが必要なので、クライアントごとの合計を見ることになります。たとえば、ClientAには2時間、00:30と00:20があります。結果をClientA = 00:50として表示します。 – Chairbedding

+0

クライアントテーブルとこのテーブルXのテーブルが異なっていますか? –

+0

私のスクリプトを更新しました。 –

0

このお試しください:

出力CのようなCTE FROM

DECLARE @ClientDuration TABLE (clientId INT NOT NULL, StartDate DATETIME, EndDate DATETIME) 

INSERT INTO @ClientDuration VALUES (1, '2017-10-13 09:21:53', '2017-10-13 10:22:53') 
INSERT INTO @ClientDuration VALUES (1, '2017-10-14 09:21:53', '2017-10-14 10:22:53') 
INSERT INTO @ClientDuration VALUES (1, '2017-10-15 09:21:53', '2017-10-15 10:22:53') 

INSERT INTO @ClientDuration VALUES (2, '2017-10-13 08:21:53', '2017-10-13 10:22:53') 
INSERT INTO @ClientDuration VALUES (2, '2017-10-14 09:21:53', '2017-10-16 10:22:53') 
INSERT INTO @ClientDuration VALUES (2, '2017-10-15 10:21:53', '2017-10-15 10:22:53') 

;WITH cte AS (
    SELECT 
     clientId, 
     CAST((SUM(DATEDIFF(minute, startdate, enddate)) % 60) AS VARCHAR(3)) AS mins, 
     CAST((SUM(DATEDIFF(minute, startdate, enddate)) - (SUM(DATEDIFF(minute, startdate, enddate)) % 60))/60 AS VARCHAR(3)) AS hrs 
    FROM @ClientDuration 
    GROUP BY clientId 
) 

SELECT clientId, 
    IIF(LEN(c.hrs) = 1, '0' + c.hrs, c.hrs) + ' H :' + IIF(LEN(c.hrs) = 1, '0' + c.hrs, c.hrs) + ' M' AS TotalDuration 

を210

関連する問題