Ver Mensaje Individual
  #6 (permalink)  
Antiguo 04/03/2015, 16:06
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 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