-2

J'essaie de réduire la somme d'une colonne de la somme d'une autre colonne en secondes, puis de la convertir en HH: MM: SS. La conversion nécessite cependant de pouvoir passer plus de 24 heures car c'est une somme de temps. Ma conversion fonctionne sur des colonnes simples sans problème, donc c'est clairement l'équation que j'essaie de faire mais je n'arrive pas à comprendre comment le faire.SQL Conversion en HH: MM: SS avec une équation - Ne fonctionne pas correctement

Les 2 colonnes sont Dispo & Les deux morts sont des Ints.

Voici ce que j'ai:

CONVERT(varchar(6), SUM([Dispo])-SUM(Dead)/3600) 
+ ':' + RIGHT('0' + CONVERT(varchar(2), (SUM([Dispo])-SUM(Dead)% 3600)/60), 2) 
+ ':' + RIGHT('0' + CONVERT(varchar(2), SUM([Dispo])-SUM(Dead) % 60), 2) AS [AfterCallWork], 

Le résultat me donne est:

AfterCallWork 
26809:0*:0* 

Le résultat que je veux pour exemple est:

AfterCallWork 
35:51:09  

(Le numéro dans le par exemple, ne sera pas en nécessairement le résultat juste un exemple de format)

données de l'échantillon est:

UniqueID | Dead | Dispo 
135151 | 20 | 200 
161681 | 35 | 421 
516168 | 10 | 308 

résultats attendus pour cet échantillon est de 0 heures, 14 minues et 24 secondes:

0:14:24 

Morte & secondes sont Dispo un gi statut ou mode. L'identifiant unique est essentiellement un identifiant d'appel.

+0

C'est SQL standard non valide. Quel SGBD utilisez-vous? –

+0

On dirait que t-sql, ce qui signifie serveur SQL. Veuillez modifier votre question pour inclure des exemples de données en tant que DDL + DML et le résultat souhaité. –

+0

Résultat souhaité était déjà là. Ajout de quelques exemples de données également – Heislegend31

Répondre

0

Voici une façon de le faire -

Créer et remplir le tableau d'échantillons (S'il vous plaît nous sauver cette étape dans vos futures des questions)

DECLARE @T AS TABLE 
(
    UniqueID int, 
    Dead int, 
    Dispo int 
) 

INSERT INTO @T VALUES 
(135151, 20, 200), 
(161681, 35, 421), 
(516168, 10, 308) 

Utilisez un CTE pour obtenir le SUM([Dispo])-SUM(Dead) - Ce étape est seulement pour rendre le code plus lisible, vous n'avez pas besoin de le faire, mais il aide:

;WITH CTE(NumberOfSeconds) AS 
(
    SELECT SUM([Dispo])-SUM(Dead) 
    FROM @T 
) 

Convertir le nombre de secondes que vous avez obtenu du CTE à une représentation de chaîne de hh:mm:ss

SELECT CAST(NumberOfSeconds /3600 as varchar(6)) + ':' + 
     RIGHT('0' + CAST((NumberOfSeconds % 3600)/60 as varchar(2)), 2) + ':' + 
     RIGHT('0' + CAST(NumberOfSeconds % 60 as varchar(2)), 2) As AfterCallWork 
FROM CTE 

Résultats:

AfterCallWork 
0:14:24 

See a live demo on rextester.