SQL Server - una columna dividirla en 3 columnas

 
Vista:
sin imagen de perfil

una columna dividirla en 3 columnas

Publicado por S (4 intervenciones) el 17/02/2017 22:29:38
Buenas,
Tengo una consulta...
Hace rato que no toco SQL y mi jefe me pidio generar como resultado algo asi:

Nombre Correr Nadar TiempoTotal

Peter 01:00:00 00:30:00 01:30:00
Marie 00:00:00 01:00:00 01:00:00
Justine 00:30:00 01:30:00 02:00:00
Benoit 02:30:00 00:30:00 03:00:00

el detalle es que la información aparece de esta manera:

Nombre Deporte Tiempo
Peter Correr 01:00:00
Peter Nadar 00:30:00
Justine Correr 00:30:00
Justine Nadar Libre 00:30:00
Justine Nadar Mariposa 00:30:00
Justine Nadar Sincronizado 00:30:00
Marie Nadar Libre 00:30:00
Marie Nadar Mariposa 00:30:00
Benoit Correr 02:30:00
Benoit Nadar 00:30:00

relativamente es sencillo pero, no se como hacerlo... es decir...
yo logro sumar los valores aunque me toca cambiarlos de formato pues son varchar y pues SUM() no lo recibe asi... pero
y Puedo sacar a un lado los que solo son correr pero al hacer Union aunque les coloque nombre diferentes me genera algo asi:



Nombre Deporte Tiempo
Peter Correr 01:00:00
Peter Total 01:30:00
Justine Correr 00:30:00
Justine Total 02:00:00
Marie Total 01:00:00
Benoit Correr 02:30:00
Benoit Total 03:00:00

que consejos me pueden dar o alguna idea de como hacerlo???

SQL
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

una columna dividirla en 3 columnas

Publicado por Isaias (4558 intervenciones) el 17/02/2017 22:45:52
¿En que motor de base de datos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

una columna dividirla en 3 columnas

Publicado por S (4 intervenciones) el 20/02/2017 21:21:36
Microsoft SQL Server 2012 Management
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

una columna dividirla en 3 columnas

Publicado por Jeanpierre (4 intervenciones) el 21/02/2017 13:18:21
Cual es la tabla que contiene la información Inicial?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

una columna dividirla en 3 columnas

Publicado por S (4 intervenciones) el 21/02/2017 13:30:29
La tabla que contiene la información inicial sería la tabla 2
Yo lo debo transformar en la tabla 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

una columna dividirla en 3 columnas

Publicado por Jeanpierre (4 intervenciones) el 21/02/2017 19:56:00
Acabo de Realizar este Query intenta y me avisas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Select Nombre,
DATEADD(HOUR,((SUM (Case When Deporte Like 'Correr%' Then Convert(Int, (Replace(Tiempo,':',''))) Else '' End))/10000)%100,
DATEADD(MINUTE,((SUM (Case When Deporte Like 'Correr%' Then Convert(Int, (Replace(Tiempo,':',''))) Else '' End))/100)%100,
DATEADD(SECOND,((SUM (Case When Deporte Like 'Correr%' Then Convert(Int, (Replace(Tiempo,':',''))) Else '' End))/100)%1,
cast('00:00:00' as time(0))))) As Correr,
 
DATEADD(HOUR,((SUM (Case When Deporte Like 'Nadar%' Then Convert(Int, (Replace(Tiempo,':',''))) Else '' End))/10000)%100,
DATEADD(MINUTE,((SUM (Case When Deporte Like 'Nadar%' Then Convert(Int, (Replace(Tiempo,':',''))) Else '' End))/100)%100,
DATEADD(SECOND,((SUM (Case When Deporte Like 'Nadar%' Then Convert(Int, (Replace(Tiempo,':',''))) Else '' End))/100)%1,
cast('00:00:00' as time(0))))) As Nadar,
 
DATEADD(HOUR,((SUM(Case When Deporte Like 'Correr%' Then Convert(Int, (Replace(Tiempo,':',''))) Else '' End +
					Case When Deporte Like 'Nadar%' Then Convert(Int, (Replace(Tiempo,':',''))) Else '' End))/10000)%100,
DATEADD(MINUTE,((SUM(Case When Deporte Like 'Correr%' Then Convert(Int, (Replace(Tiempo,':',''))) Else '' End +
					Case When Deporte Like 'Nadar%' Then Convert(Int, (Replace(Tiempo,':',''))) Else '' End))/100)%100,
DATEADD(SECOND,((SUM(Case When Deporte Like 'Correr%' Then Convert(Int, (Replace(Tiempo,':',''))) Else '' End +
Case When Deporte Like 'Nadar%' Then Convert(Int, (Replace(Tiempo,':',''))) Else '' End))/100)%1,
cast('00:00:00' as time(0))))) As TiempoTotal
From Tabla2
Group By Nombre

Me dices que tal se te dan los resultados
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

una columna dividirla en 3 columnas

Publicado por S (4 intervenciones) el 22/02/2017 22:52:56
Muchas gracias Jean Pierre la verdad si funciono muy bien... pero sabes yo utilizo otra manera para realizar la suma del TiempoTotal
pero no estoy muy segura si es correcta... porque por ejemplo con la tuya se genera el tiempo de correr, pero todos los segundos quedan en 00
Y con la otra forma si da las horas min y seg que son pero creo que hay algo erroneo en la formula...
Si me dieras tu opinion te agradeceria...

RTRIM(SUM(DATEDIFF(MINUTE, '0:00:00', Tiempo)) /60 )+':'+
RIGHT('0' + RTRIM( SUM(DATEDIFF(MINUTE, '0:00:00', Tiempo)) % 60) ,2)+
':'+ RIGHT('0' + RTRIM( SUM(DATEDIFF(SECOND, '0:00:00', Tiempo)) % 60) ,2) as TiempoTotal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar