Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Como agrupar varios resultados en un registro

Estas en el tema de Como agrupar varios resultados en un registro en el foro de SQL Server en Foros del Web. haber como me explico, tengo estas dos tablas, y lo que intento hacer es recoger todos los detalles del cliente 11 que sean de tipoDetalle ...
  #1 (permalink)  
Antiguo 24/09/2014, 13:16
Avatar de bemonoali  
Fecha de Ingreso: septiembre-2014
Mensajes: 4
Antigüedad: 9 años, 7 meses
Puntos: 0
Pregunta Como agrupar varios resultados en un registro

haber como me explico, tengo estas dos tablas, y lo que intento hacer es recoger todos los detalles del cliente 11 que sean de tipoDetalle 22, 33, 44 y guardarlo con la fecha en una sala fila

el resultado seria el siguiente

iddetalle fecha descripcion tipoDetalle1 valor1 tipoDetalle2 valor2 tipoDetalle3 valor3
211 2013-11-11 Lorem ipsum... 22 12,8 33 52,4 44 5,8

y repetirlo para los siguiente detalle del cliente

gracias por vuestra ayuda

------ TABLA 1 -----------------------
id idcliente iddetalle fecha descripcion
1 11 211 2013-11-11 00:00:00.000 Lorem ipsum dolor sit amet
2 16 216 2014-01-16 00:00:00.000 Maecenas pulvinar erat dolor
3 22 222 2014-02-22 00:00:00.000 Consectetur adipiscing elit.
6 55 123 2013-08-01 00:00:00.000 Etiam malesuada ligula nec massa
7 11 321 2013-11-15 00:00:00.000 Ipsum a imperdiet dapibus,
8 16 344 2014-01-30 00:00:00.000 Vestibulum facilisis. Praesent finibus
9 11 366 2013-12-21 00:00:00.000 Phasellus at gravida dolor
------ TABLA 2 -----------------------
id idDiaDetalle tipoDetalle valor
1 211 22 12,8
2 211 33 52,4
3 211 44 5,8
4 216 56 15,2
5 216 33 45,8
6 216 22 13,8
7 216 44 6,1
8 321 22 13
9 321 33 54
10 321 44 6,2
11 344 17 85,6
12 344 22 45,5
13 344 33 65,3
14 344 36 45,6
15 344 44 13,1
16 344 47 321
17 366 56 45,7
18 366 10 45,8
19 366 22 58
20 366 33 57,9
21 366 37 55,5
22 366 45 45,4
----------------------------
  #2 (permalink)  
Antiguo 24/09/2014, 14:45
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Como agrupar varios resultados en un registro

seria con un simple case algo como esto:

Código SQL:
Ver original
  1. SELECT
  2. t1.iddetalle, t1.fecha,t1.descripcion
  3. CASE WHEN t2.tipodetalle=22 THEN t2.tipodetalle AS Detalle1,
  4. CASE WHEN t2.tipodetalle=22 THEN t2.valor AS valor1
  5. ...y asi sucesivamente para cada detalle valor que necesitas :P
  6. FROM tabla1 AS t1
  7. LEFT JOIN tabla2 AS t2 ON (t1.idcliente=t2.iddiadetalle)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 24/09/2014, 17:14
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Como agrupar varios resultados en un registro

El problema con esta propuesta, es que fueran MUCHOS detalle y valores...
__________________
MCTS Isaias Islas
  #4 (permalink)  
Antiguo 25/09/2014, 00:37
Avatar de bemonoali  
Fecha de Ingreso: septiembre-2014
Mensajes: 4
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: Como agrupar varios resultados en un registro

primer dar gracias a Libras por su rápida contestación pero no me sirve ya que sigue devolviendo todos los registros por separado, pero me aporto nuevos conocimientos

tengo que rellenar un gráfico con tiempo(fecha) y data1(identconstante=22), data2(identconstante=33), data3(identconstante=44)

gracias por los comentarios

el query me quedo así, pero como mencione, no devuelve los 3 valores en una fila

Código SQL:
Ver original
  1. SELECT t1.iddetalle, t1.fecha ,t1.descripcion,
  2.     CASE
  3.         WHEN t2.identconstante=22 THEN t2.valor
  4.         WHEN t2.identconstante=33 THEN t2.valor
  5.         WHEN t2.identconstante=44 THEN t2.valor
  6.     ELSE ''
  7.     END
  8. FROM tabla1 AS t1
  9.     LEFT JOIN tabla2 AS t2 ON (t1.iddetalle =t2.idDiaDetalle )

Última edición por gnzsoloyo; 25/09/2014 a las 08:41
  #5 (permalink)  
Antiguo 25/09/2014, 07:45
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Como agrupar varios resultados en un registro

exacto no los devuelve en una sola fila, eso ya lo habia notado, ahora te toca a ti jugar un poco con la consulta y arreglarla de modo que aparezca como lo necesitas, como hacer eso, te voy a dar una pista.....SUBQUERYES
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 25/09/2014, 08:12
Avatar de bemonoali  
Fecha de Ingreso: septiembre-2014
Mensajes: 4
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: Como agrupar varios resultados en un registro

Hola Libras, como habrás notado soy un principiante en SQL y tengo mucho que aprender. Como era para el trabajo y urgía tuve que solucionarlo a través de código behint pero agradezco tu aporte y estudiare los SUBQUERYES y si logro crear una consulta como la que esta propuesta lo publico aquí.

un saludo
benito
  #7 (permalink)  
Antiguo 25/09/2014, 10:06
Avatar de bemonoali  
Fecha de Ingreso: septiembre-2014
Mensajes: 4
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: Como agrupar varios resultados en un registro

Hola Libras, como habrás notado soy un principiante en SQL y tengo mucho que aprender. Como era para el trabajo y urgía tuve que solucionarlo a través de código behint pero agradezco tu aporte y estudiare los SUBQUERYES y si logro crear una consulta como la que esta propuesta lo publico aquí.

un saludo
benito

Bueno ya esta solucionado, para la próxima ya se como, gracias a todos. Es mas fácil pensar una vez solucionado el problema jejej, doy por cerrado este hilo

MI SOLUCIÓN
Código:
DECLARE @cliente as varchar(10), @tipodetalle1 AS int, @tipodetalle2 AS int, @tipodetalle3 AS int
SET @cliente = 11
SET @tipodetalle1 = 22
SET @tipodetalle2 = 33
SET @tipodetalle3 = 44

SELECT DISTINCT t1.iddetalle, t1.fecha , t1.descripcion ,
		(SELECT valor FROM pruebadetalle pdet WHERE pdet.iddetalle = t1.iddetalle AND pdet.tipodetalle = @tipodetalle1 ) as valor1,
		(SELECT valor FROM pruebadetalle pdet WHERE pdet.iddetalle = t1.iddetalle AND pdet.tipodetalle = @tipodetalle2 ) as valor2,
		(SELECT valor FROM pruebadetalle pdet WHERE pdet.iddetalle = t1.iddetalle AND pdet.tipodetalle = @tipodetalle3 ) as valor3
FROM prueba AS t1
INNER JOIN pruebadetalle AS t2 ON t2.iddetalle = t1.iddetalle 
WHERE idcliente = @cliente
---
iddetalle  fecha  descripcion  valor1	valor2	valor3
211;2013-11-11 00:00:00.000;Lorem ipsum dolor sit amet ;12,8;52,4;5,8
321;2013-11-15 00:00:00.000;Ipsum a imperdiet dapibus, ;13;54;6,2
366;2013-12-21 00:00:00.000;Phasellus at gravida dolor   ;58;57,9;NULL

Última edición por bemonoali; 26/09/2014 a las 00:16 Razón: Highlight incorrecto. Usar "SQL", por favor.

Etiquetas: agrupar, registro, resultados, siguiente, tabla, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:09.