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

[SOLUCIONADO] Consulta algo compleja (Dos diferentes consultas unidas)

Estas en el tema de Consulta algo compleja (Dos diferentes consultas unidas) en el foro de Bases de Datos General en Foros del Web. Mi duda es la siguiente Tengo 2 tablas una de paletas y una de premios (TIPO A Y B y un numero que lo define) ...
  #1 (permalink)  
Antiguo 04/03/2015, 12:09
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
Exclamación Consulta algo compleja (Dos diferentes consultas unidas)

Mi duda es la siguiente
Tengo 2 tablas una de paletas y una de premios (TIPO A Y B y un numero que lo define)
La tabla
-----------------------
|Paletas
-----------------------
|id|Sabor-|FechaExpiracion|
|1-|fresa--|2014------------|
|2-|Piña---|2013------------|
|3-|Sandia-|2015------------|
-------------------------------

-------------------------------
|Tipo_premio
-------------------------------
|id-|Sabor-|tipo-Premio|
|1-|fresa--|A1----------|
|2-|fresa--|A2----------|
|3-|fresa--|A3----------|
|4-|fresa--|A4----------|
|5-|fresa--|A5----------|
|6-|fresa--|A6----------|
|7-|fresa--|A7----------|
|8-|fresa--|B1----------|
|9-|fresa--|B2----------|
|10|Piña--|B1----------|
|11|Piña--|B2----------|
|12|Piña--|B3----------|
|13|Piña--|A1----------|
|14|Sandia|A1----------|
|15|Sandia|A2----------|
|16|Sandia|A3----------|
|17|Sandia|A4----------|
|18|Sandia|A5----------|
---------------------------


El problema es que necesito clasificar los tipos de premios y sabores en un query con los datos de las paletas digamos lo que necesito es un resultado asi

Paletas as "P", Tipo_premios as "T"
Donde sabor = "fresa"
O bien podria ser P.fechaExp >=2013 and P.fechaExp<=2014

|P.sabor|P.FechaExp|T.tipo-Premio as "Nivel A"|T.tipo-Premio as "Nivel B"
|fresa---|2014-------|A1--------------------------|B1----------|
|fresa---|2014-------|A2--------------------------|B2----------|
|fresa---|2014-------|A3--------------------------|-------------|
|fresa---|2014-------|A4--------------------------|-------------|
|fresa---|2014-------|A5--------------------------|-------------|
|fresa---|2014-------|A6--------------------------|-------------|
|fresa---|2014-------|A7--------------------------|-------------|

Ese seria el resultado final llevo buscando por foros ya unos dias y me urge
El full outer join no funciono
Intente con Union pero no funciono (supongo es mi query)
Con Left join en vez de sacarme 7 filas me da un resultado de
todas las A con b1, luego todas A con B2
Por lo tanto me regresa 14 filas en vez de solo 7, disculpen un poco mi mal redacción pero ya estoy algo desesperado
  #2 (permalink)  
Antiguo 04/03/2015, 13:37
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: Consulta algo compleja (Dos diferentes consultas unidas)

Código SQL:
Ver original
  1. CREATE TABLE #paletas
  2. (
  3. id INT,
  4. sabor VARCHAR(20),
  5. fechaexpiracion INT
  6. )
  7.  
  8. INSERT INTO #paletas VALUES (1,'fresa',2014)
  9. INSERT INTO #paletas VALUES (2,'Piña',2013)
  10. INSERT INTO #paletas VALUES (3,'Sandia',2015)
  11.  
  12.  
  13. CREATE TABLE #tipo_premio
  14. (
  15. id INT,
  16. sabor VARCHAR(20),
  17. tipo_premio VARCHAR(20)
  18. )
  19. --|id-|Sabor-|tipo-Premio|
  20. INSERT INTO #tipo_premio VALUES (1,'fresa','A1')
  21. INSERT INTO #tipo_premio VALUES (2,'fresa','A2')
  22. INSERT INTO #tipo_premio VALUES (3,'fresa','A3')
  23. INSERT INTO #tipo_premio VALUES (4,'fresa','A4')
  24. INSERT INTO #tipo_premio VALUES (5,'fresa','A5')
  25. INSERT INTO #tipo_premio VALUES (5,'fresa','A5')
  26. INSERT INTO #tipo_premio VALUES (5,'fresa','A5')
  27. INSERT INTO #tipo_premio VALUES (5,'fresa','A5')
  28. INSERT INTO #tipo_premio VALUES (6,'fresa','A6')
  29. INSERT INTO #tipo_premio VALUES (7,'fresa','A7')
  30. INSERT INTO #tipo_premio VALUES (8,'fresa','B1')
  31. INSERT INTO #tipo_premio VALUES (9,'fresa','B2')
  32. INSERT INTO #tipo_premio VALUES (10,'Piña','B1')
  33. INSERT INTO #tipo_premio VALUES (11,'Piña','B2')
  34. INSERT INTO #tipo_premio VALUES (12,'Piña','B3')
  35. INSERT INTO #tipo_premio VALUES (13,'Piña','A1')
  36. INSERT INTO #tipo_premio VALUES (14,'Sandia','A1')
  37. INSERT INTO #tipo_premio VALUES (15,'Sandia','A2')
  38. INSERT INTO #tipo_premio VALUES (16,'Sandia','A3')
  39. INSERT INTO #tipo_premio VALUES (17,'Sandia','A4')
  40. INSERT INTO #tipo_premio VALUES (18,'Sandia','A5')
  41.  
  42. SELECT t2.*,t1.fechaexpiracion FROM #paletas AS t1 LEFT JOIN
  43. (
  44. SELECT id,sabor,tipo_premio, '' AS tipo_premio2 FROM #tipo_premio WHERE tipo_premio LIKE '%A%'
  45. UNION
  46. SELECT id,sabor,'' AS tipo_premio, tipo_premio AS tipo_premio2 FROM #tipo_premio WHERE tipo_premio LIKE '%B%'
  47. ) AS t2 ON (t1.sabor=t2.sabor)
  48. WHERE t1.sabor='fresa'

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 04/03/2015, 14:10
Avatar de wladtepes  
Fecha de Ingreso: febrero-2008
Mensajes: 140
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Consulta algo compleja (Dos diferentes consultas unidas)

no es mucho pero te ayudara , para lo otro debes de recorrer una tabla temporal y crear una columna con los datos segun la busqueda osea con los datos que tengan 'B'

Código SQL:
Ver original
  1. SELECT  p.sabor ,
  2.         p.fecha ,
  3.         t.tipo_premio AS 'Nivel A' ,
  4.         t.tipo_premio AS 'Nivel B'
  5. FROM    dbo.Paletas p
  6.         INNER JOIN dbo.Tipo_premio t ON p.sabor = t.sabor
  7. WHERE   p.fecha >= 2013
  8.         AND p.fecha <= 2014
  9.         AND t.sabor = 'fresa'

Última edición por gnzsoloyo; 04/03/2015 a las 14:16
  #4 (permalink)  
Antiguo 04/03/2015, 14:22
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: Consulta algo compleja (Dos diferentes consultas unidas)

Cita:
Iniciado por wladtepes Ver Mensaje
no es mucho pero te ayudara , para lo otro debes de recorrer una tabla temporal y crear una columna con los datos segun la busqueda osea con los datos que tengan 'B'

Código SQL:
Ver original
  1. SELECT  p.sabor ,
  2.         p.fecha ,
  3.         t.tipo_premio AS 'Nivel A' ,
  4.         t.tipo_premio AS 'Nivel B'
  5. FROM    dbo.Paletas p
  6.         INNER JOIN dbo.Tipo_premio t ON p.sabor = t.sabor
  7. WHERE   p.fecha >= 2013
  8.         AND p.fecha <= 2014
  9.         AND t.sabor = 'fresa'
Tu codigo regresa algo que no es lo que se esta pidiendo.........

sabor fechaexpiracion Nivel A Nivel B
fresa 2014 A1 A1
fresa 2014 A2 A2
fresa 2014 A3 A3
fresa 2014 A4 A4
fresa 2014 A5 A5
fresa 2014 A5 A5
fresa 2014 A5 A5
fresa 2014 A5 A5
fresa 2014 A6 A6
fresa 2014 A7 A7
fresa 2014 B1 B1
fresa 2014 B2 B2
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 04/03/2015, 15:45
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
De acuerdo Respuesta: Consulta algo compleja (Dos diferentes consultas unidas)

Cita:
Iniciado por Libras Ver Mensaje
Código SQL:
Ver original
  1. CREATE TABLE #paletas
  2. (
  3. id INT,
  4. sabor VARCHAR(20),
  5. fechaexpiracion INT
  6. )
  7.  
  8. INSERT INTO #paletas VALUES (1,'fresa',2014)
  9. INSERT INTO #paletas VALUES (2,'Piña',2013)
  10. INSERT INTO #paletas VALUES (3,'Sandia',2015)
  11.  
  12.  
  13. CREATE TABLE #tipo_premio
  14. (
  15. id INT,
  16. sabor VARCHAR(20),
  17. tipo_premio VARCHAR(20)
  18. )
  19. --|id-|Sabor-|tipo-Premio|
  20. INSERT INTO #tipo_premio VALUES (1,'fresa','A1')
  21. INSERT INTO #tipo_premio VALUES (2,'fresa','A2')
  22. INSERT INTO #tipo_premio VALUES (3,'fresa','A3')
  23. INSERT INTO #tipo_premio VALUES (4,'fresa','A4')
  24. INSERT INTO #tipo_premio VALUES (5,'fresa','A5')
  25. INSERT INTO #tipo_premio VALUES (5,'fresa','A5')
  26. INSERT INTO #tipo_premio VALUES (5,'fresa','A5')
  27. INSERT INTO #tipo_premio VALUES (5,'fresa','A5')
  28. INSERT INTO #tipo_premio VALUES (6,'fresa','A6')
  29. INSERT INTO #tipo_premio VALUES (7,'fresa','A7')
  30. INSERT INTO #tipo_premio VALUES (8,'fresa','B1')
  31. INSERT INTO #tipo_premio VALUES (9,'fresa','B2')
  32. INSERT INTO #tipo_premio VALUES (10,'Piña','B1')
  33. INSERT INTO #tipo_premio VALUES (11,'Piña','B2')
  34. INSERT INTO #tipo_premio VALUES (12,'Piña','B3')
  35. INSERT INTO #tipo_premio VALUES (13,'Piña','A1')
  36. INSERT INTO #tipo_premio VALUES (14,'Sandia','A1')
  37. INSERT INTO #tipo_premio VALUES (15,'Sandia','A2')
  38. INSERT INTO #tipo_premio VALUES (16,'Sandia','A3')
  39. INSERT INTO #tipo_premio VALUES (17,'Sandia','A4')
  40. INSERT INTO #tipo_premio VALUES (18,'Sandia','A5')
  41.  
  42. SELECT t2.*,t1.fechaexpiracion FROM #paletas AS t1 LEFT JOIN
  43. (
  44. SELECT id,sabor,tipo_premio, '' AS tipo_premio2 FROM #tipo_premio WHERE tipo_premio LIKE '%A%'
  45. UNION
  46. SELECT id,sabor,'' AS tipo_premio, tipo_premio AS tipo_premio2 FROM #tipo_premio WHERE tipo_premio LIKE '%B%'
  47. ) AS t2 ON (t1.sabor=t2.sabor)
  48. WHERE t1.sabor='fresa'

saludos!
Buenas muchas gracias por tu respuesta la verdad eso si no se me hubiese ocurrido y funciona bien solo mi cuestion es si es posible que en vez de que salgan espacios en blanco de un costado de la fila sean juntos en vez de que sean 9 filas sean 7 acomodados asi ->

|valor|valor2
|A1---|B1
|A2---|B2
|A3---|
|A4---|
|A5---|
|A6---|
|A7---|
en vez de asi

|valor|valor2
|A1---|
|------|B1
|A2---|
|------|B2
|A3---|
|A4---|
|A5---|
|A6---|
|A7---|



De ante mano una disculpa por no buscar una solución a esto por mi mismo pero ya estoy contra tiempo y por mas que busque no le encontraba una solución.
Y por si las malas ando programandolo debido al tiempo.

Y de verdad muchas gracias por la ayuda, disculpa la tardanza en mi respuesta ya estaba viendo en programarlo mejor desde otra respuesta de otro query como te comente, lo cual me iba a quitar mas tiempo.
  #6 (permalink)  
Antiguo 04/03/2015, 16:06
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: Consulta algo compleja (Dos diferentes consultas unidas)

Código SQL:
Ver original
  1. CREATE TABLE #paletas
  2. (
  3. id INT,
  4. sabor VARCHAR(20),
  5. fechaexpiracion INT
  6. )
  7.  
  8. INSERT INTO #paletas VALUES (1,'fresa',2014)
  9. INSERT INTO #paletas VALUES (2,'Piña',2013)
  10. INSERT INTO #paletas VALUES (3,'Sandia',2015)
  11.  
  12.  
  13. CREATE TABLE #tipo_premio
  14. (
  15. id INT,
  16. sabor VARCHAR(20),
  17. tipo_premio VARCHAR(20)
  18. )
  19. --|id-|Sabor-|tipo-Premio|
  20. INSERT INTO #tipo_premio VALUES (1,'fresa','A1')
  21. INSERT INTO #tipo_premio VALUES (2,'fresa','A2')
  22. INSERT INTO #tipo_premio VALUES (3,'fresa','A3')
  23. INSERT INTO #tipo_premio VALUES (4,'fresa','A4')
  24. INSERT INTO #tipo_premio VALUES (5,'fresa','A5')
  25. INSERT INTO #tipo_premio VALUES (5,'fresa','A5')
  26. INSERT INTO #tipo_premio VALUES (5,'fresa','A5')
  27. INSERT INTO #tipo_premio VALUES (5,'fresa','A5')
  28. INSERT INTO #tipo_premio VALUES (6,'fresa','A6')
  29. INSERT INTO #tipo_premio VALUES (7,'fresa','A7')
  30. INSERT INTO #tipo_premio VALUES (8,'fresa','B1')
  31. INSERT INTO #tipo_premio VALUES (9,'fresa','B2')
  32. INSERT INTO #tipo_premio VALUES (10,'Piña','B1')
  33. INSERT INTO #tipo_premio VALUES (11,'Piña','B2')
  34. INSERT INTO #tipo_premio VALUES (12,'Piña','B3')
  35. INSERT INTO #tipo_premio VALUES (13,'Piña','A1')
  36. INSERT INTO #tipo_premio VALUES (14,'Sandia','A1')
  37. INSERT INTO #tipo_premio VALUES (15,'Sandia','A2')
  38. INSERT INTO #tipo_premio VALUES (16,'Sandia','A3')
  39. INSERT INTO #tipo_premio VALUES (17,'Sandia','A4')
  40. INSERT INTO #tipo_premio VALUES (18,'Sandia','A5')
  41.  
  42. SELECT t2.*,t1.fechaexpiracion INTO #temp FROM #paletas AS t1 LEFT JOIN
  43. (
  44. SELECT id,sabor,tipo_premio, '' AS tipo_premio2 FROM #tipo_premio WHERE tipo_premio LIKE '%A%'
  45. UNION
  46. SELECT id,sabor,'' AS tipo_premio, tipo_premio AS tipo_premio2 FROM #tipo_premio WHERE tipo_premio LIKE '%B%'
  47. ) AS t2 ON (t1.sabor=t2.sabor)
  48. WHERE t1.sabor='piña'
  49.  
  50. SELECT * INTO #temp2 FROM(
  51. SELECT t1.id,t1.sabor,t1.tipo_premio,t2.tipo_premio2,t1.fechaexpiracion FROM #temp AS t1
  52. INNER JOIN #temp AS t2 ON (t1.sabor=t2.sabor AND SUBSTRING(t1.tipo_premio,2,1)=SUBSTRING(t2.tipo_premio2,2,1))
  53. WHERE t1.tipo_premio<>'' AND t2.tipo_premio2<>''
  54. ) AS t3
  55.  
  56.  
  57. SELECT * FROM #temp2
  58. UNION
  59. SELECT * FROM(
  60. SELECT id,sabor,tipo_premio,'' tipo_premio2,fechaexpiracion FROM #temp WHERE tipo_premio NOT IN (SELECT tipo_premio FROM #temp2) AND tipo_premio<>''
  61. UNION
  62. SELECT id,sabor,'' tipo_premio,tipo_premio2,fechaexpiracion FROM #temp WHERE tipo_premio NOT IN (SELECT tipo_premio FROM #temp2) AND tipo_premio2<>''
  63. ) AS completa
  64.  
  65. DROP TABLE #temp
  66. DROP TABLE #temp2

Resultado:
1 fresa A1 B1 2014
2 fresa A2 B2 2014
3 fresa A3 2014
4 fresa A4 2014
5 fresa A5 2014
6 fresa A6 2014
7 fresa A7 2014

Piña

id sabor tipo_premio tipo_premio2 fechaexpiracion
10 Piña B1 2013
11 Piña B2 2013
12 Piña B3 2013
13 Piña A1 B1 2013

Solo como comentario, te pongo una respuesta mucho mejor que la del 2 post, y ni siquiera la analisas hasta que te das cuenta de que no es viable.....es lo que me gusta de ayudar en los foros :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 04/03/2015 a las 16:13
  #7 (permalink)  
Antiguo 04/03/2015, 16:57
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
De acuerdo Respuesta: Consulta algo compleja (Dos diferentes consultas unidas)

Te soy sincero, no entendi un tanto tu respuesta supongo fue sarcasmo,
Claro que cheque tu respuesta, la verdad no tengo tanta experiencia con query's, en cuanto a las respuestas disculpa si no respondi como debia , es la primera vez que me suscribo a un foro, por lo general he procurado siempre investigar antes de hacer las cosas, pero para esta se me complico el tiempo, estuve buscando 2 dias como poderle hacer, tambien testie bastantes veces con mi bd la respuesta para estar 100% que me funcionaba, no me gusta hacer algo sin analizarlo mas sinceramente estas en un nivel muy muy diferente al mio, en mi vida se me hubiese ocurrido que se podia hacer eso, sinceramente si tienes alguna pagina que me recomiendes para aprender mas sobre sql a ese nivel te agradeceria mucho, odio preguntar porque acepto que de plano no logre solucionarlo por mi mismo, asi que siempre he investigado pero esto si es contra tiempo.
Te repito
-Perdona si no me exprese bien, claro que analice lo que me respondiste gracias.
-Si sabes de una pagina para mejorar a un nivel un poco mas avanzado o algún libro que me recomiendes te lo agradeceria mucho.
-La respuesta del segundo post es parecido a lo que hacia pero no resulta ademas vi que lo corregiste por eso ya no alcance a comentar ni revisarla, solo me enfoque en tu respuesta porque jamas habia usado un queri asi, en la noche igual agradezco por la ayuda, puesto que igual trató de ayudar solo que en serio estoy contra reloj, ahorita vuelvo a checar la respuesta, casi termine de programarlo pero para futuras ocaciones o un poco despues para mejorar el codigo usare el query o si me da mas tiempo lo implemento.
-Una disculpa si no me expreso bien espero entiendas un poco que ando bajo presión un poco.
-Y repito muchas gracias por tu respuesta y la ayuda brindada.
-Si sabes de algun buen libro o pagina web para mejorar te lo agradeceria mucho y mas si tiene ejemplos para mi desgracia soy muy visual.
  #8 (permalink)  
Antiguo 04/03/2015, 17:06
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: Consulta algo compleja (Dos diferentes consultas unidas)

Libro o pagina, la verdad no, como aprendi, poco a poco, mejorando de mis queries y aprendiendo la logica de programacion en bases de datos(que es muy diferente a la logica normal de programacion).

Si ocupas mas ayuda la hora de consultoria sale barata jajajajaja ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: multiples, mysql+consulta, null, tablasmysql, union
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 19:44.