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

Duda con UNION y seleccionar el valor deseado

Estas en el tema de Duda con UNION y seleccionar el valor deseado en el foro de SQL Server en Foros del Web. Buenas noches, he estado buscando en muchos lados, inclusive en la página oficial de SQL para dar a la solución al problema a continuación y ...
  #1 (permalink)  
Antiguo 07/12/2012, 03:31
Avatar de ajgbcool  
Fecha de Ingreso: febrero-2008
Mensajes: 17
Antigüedad: 16 años, 9 meses
Puntos: 0
Duda con UNION y seleccionar el valor deseado

Buenas noches, he estado buscando en muchos lados, inclusive en la página oficial de SQL para dar a la solución al problema a continuación y no lo he conseguido, voy a explicar un poco lo que necesito:

Tengo una tabla que llamaré "partidos" en esa tengo datos de varios partidos. Necesito contar los partidos que ganó cada quién, empató y perdió y bueno, lo demás me imagino que es derivado a esto.

Me ha resultado con UNION pero el valor me sale en filas y no en columnas, entonces cuando lo leo en el php no sé como acceder a los valores valores de row[0]

Sin mas, esta así está compuesta mi tabla partidos:

id
local
visitante
resultadolocal
resultadovisitante

y esta es la consulta

(SELECT count(local) AS datos FROM partidos WHERE home = 'ven' AND resultadolocal > resultadovisitante) UNION (SELECT count(local) AS datos FROM partidos WHERE home = 'ven' AND resultadolocal = resultadovisitante)

el resultado es algo asi como:

datos
12
11

Funciona si, pero en php no se como acceder al campo de valor 11 y si hay una manera menos engorrosa de hacer esto. Gracias.
  #2 (permalink)  
Antiguo 07/12/2012, 03:52
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: Duda con UNION y seleccionar el valor deseado

Te es mejor un CASE del tipo

Código SQL:
Ver original
  1. SELECT CASE WHEN resultadolocal > resultadovisitante THEN 'win'
  2. WHEN resultadolocal = resultadovisitante THEN 'draw'
  3. WHEN resultadolocal < resultado visitante THEN 'lose'
  4. END
  5. FROM partidos
  #3 (permalink)  
Antiguo 07/12/2012, 05:01
Avatar de ajgbcool  
Fecha de Ingreso: febrero-2008
Mensajes: 17
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Duda con UNION y seleccionar el valor deseado

Perfecto! pero ahora tengo un problema con eso, me sale una lista de wins, draws y loses... Que obviamente es el resultado del código, ahora... ¿Cómo hago para agruparlos en equipo? es decir, contar los wins/draws/loses de equipo 1, equipo 2, equipo 3, etc...

La idea mas o menos es hacer una tabla de posiciones en base de esta tabla y este código...

Gracias, de a poco voy dando con una solución!
  #4 (permalink)  
Antiguo 07/12/2012, 05:16
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: Duda con UNION y seleccionar el valor deseado

Sería algo así (esta consulta te dará error, pero coge la idea)

Código SQL:
Ver original
  1. SELECT equipo, COUNT(win), COUNT(draw), COUNT(lose)
  2. FROM (
  3.     SELECT equipo, CASE WHEN resultadolocal > resultadovisitante THEN 'win'
  4.     WHEN resultadolocal = resultadovisitante THEN 'draw'
  5.     WHEN resultadolocal < resultado visitante THEN 'lose'
  6.     END
  7.     FROM partidos)
  8. GROUP BY equipo
  #5 (permalink)  
Antiguo 07/12/2012, 09:50
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Duda con UNION y seleccionar el valor deseado

Código SQL:
Ver original
  1. SELECT Equipo,
  2.     COUNT(CASE WHEN resultadolocal > resultadovisitante THEN 1 END) Win,
  3.     COUNT(CASE WHEN resultadolocal = resultadovisitante THEN 1 END) Draw,
  4.     COUNT(CASE WHEN resultadolocal < resultadovisitante THEN 1 END) Loose
  5. FROM partidos
  6. GROUP BY Equipo;
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #6 (permalink)  
Antiguo 07/12/2012, 18:41
Avatar de ajgbcool  
Fecha de Ingreso: febrero-2008
Mensajes: 17
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Duda con UNION y seleccionar el valor deseado

Gracias esa es la solución. Puedo añadir algo mas y no molesto mas en un buen tiempo?

bien resuelto el tema este, el de crear los datos de ganados, empates y perdidos. Eso me crea los datos cuando un equipo es local, para hacer la tabla completa hay que hacer el mismo procedimiento (no se si esta vez se usa UNION) pero a la inversa. Yo he intentado con UNION y GROUP BY, algo así:

(SELECT equipo,
count(Count(Case When resultadolocal > resultadovisitante Then 1 End) win,
Count(Case When resultadolocal = resultadovisitante Then 1 End) draw,
Count(Case When resultadolocal > resultadovisitante Then 1 End) lose,
sum(resultadolocal) AS golesfavor,
sum(resultadovisitante) AS golescontra
FROM partidos
GROUP BY equipos)
UNION ALL
(SELECT equipo,
count(Count(Case When resultadolocal > resultadovisitante Then 1 End) win,
Count(Case When resultadolocal = resultadovisitante Then 1 End) draw,
Count(Case When resultadolocal > resultadovisitante Then 1 End) lose,
sum(resultadolocal) AS golesfavor,
sum(resultadovisitante) AS golescontra
FROM partidos
GROUP BY equipos)

___

El restultado es algo asi como:

equipo - win - draw - lose - golesfavor - golescontra
Equipo A - 1 - 1- 1 - 3 - 3
Equipo B - 2 - 2- 2 - 4 - 4
Equipo A - 0 - 0- 0 - 1 - 1
Equipo B - 5 - 5- 5 - 3 - 3

_____

Lo que hace es que hace correctamente las dos consultas, pero, a la final no hace el GROUP BY entre las dos consultas, entonces me duplica el equipo con los datos local y visitante. He tratado de hacer el (SELECT...) UNION ALL (SELECT...) GROUP BY pero me da error...

Gracias! me han ayudado bastante con esto!
  #7 (permalink)  
Antiguo 07/12/2012, 19:32
Avatar de ajgbcool  
Fecha de Ingreso: febrero-2008
Mensajes: 17
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Duda con UNION y seleccionar el valor deseado

No se si se puede hacer flow, pero ya di con la solución. es:

SELECT sum(valores), sum(valores) FROM ((SELECT...) UNION ALL (SELECT...)) AS res GROUP BY equipo

Con esto, se suman los valores y además se agrupa por equipo.

Etiquetas: deseado, select, sql, tabla, union, campos
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 06:30.