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

Seleccionar un registro de una query con UNION

Estas en el tema de Seleccionar un registro de una query con UNION en el foro de SQL Server en Foros del Web. Hola buenas, creo que es aquí donde tengo que hacer esta consulta, si no es así, por favor decirmelo. Bueno tengo una query con varias ...
  #1 (permalink)  
Antiguo 26/05/2011, 04:25
 
Fecha de Ingreso: febrero-2008
Mensajes: 22
Antigüedad: 16 años, 2 meses
Puntos: 0
Seleccionar un registro de una query con UNION

Hola buenas, creo que es aquí donde tengo que hacer esta consulta, si no es así, por favor decirmelo.

Bueno tengo una query con varias select y entre ellas tengo puesto UNION, mi pregunta es como puedo hacer para que me saque un registro por cada dato distinto y no varios como hasta ahora. Creo que no me he explicado bien, os pongo la query y el resultado actual y el que quisiera obtener. Bueno que sepais que esto lo lanzo por el analizador de consultas contra un SQL 2008.

(SELECT MARA.EAN11 AS ISBN, S032.MATNR AS MATERIAL, cast(S032.MBWBEST as int) AS DER, 0 AS BAR, 0 AS HUM, 0 AS ECO, 0 AS SSO
FROM S032 LEFT JOIN
MARA ON S032.MATNR = MARA.MATNR
WHERE S032.WERKS = '1003'
AND S032.LGORT = '1007'
AND S032.MBWBEST <> 0 AND S032.MBWBEST IS NOT NULL
AND S032.MATNR = '000000000100710046'
UNION
SELECT MARA.EAN11 AS ISBN, S032.MATNR AS MATERIAL, 0 AS DER, cast(S032.MBWBEST as int) AS BAR, 0 AS HUM, 0 AS ECO, 0 AS SSO
FROM S032 LEFT JOIN
MARA ON S032.MATNR = MARA.MATNR
WHERE S032.WERKS = '1002'
AND S032.LGORT = '1006'
AND S032.MBWBEST <> 0 AND S032.MBWBEST IS NOT NULL
AND S032.MATNR = '000000000100710046'
UNION
SELECT MARA.EAN11 AS ISBN, S032.MATNR AS MATERIAL, 0 AS DER, 0 AS BAR, cast(S032.MBWBEST as int) AS HUM, 0 AS ECO, 0 AS SSO
FROM S032 LEFT JOIN
MARA ON S032.MATNR = MARA.MATNR
WHERE S032.WERKS = 'L001'
AND S032.LGORT = '1002'
AND S032.MBWBEST <> 0 AND S032.MBWBEST IS NOT NULL
AND S032.MATNR = '000000000100710046'
UNION
SELECT MARA.EAN11 AS ISBN, S032.MATNR AS MATERIAL, 0 AS DER, 0 AS BAR, 0 AS HUM, cast(S032.MBWBEST as int) AS ECO, 0 AS SSO
FROM S032 LEFT JOIN
MARA ON S032.MATNR = MARA.MATNR
WHERE S032.WERKS = 'L001'
AND S032.LGORT = '1003'
AND S032.MBWBEST <> 0 AND S032.MBWBEST IS NOT NULL
AND S032.MATNR = '000000000100710046'
UNION
SELECT MARA.EAN11 AS ISBN, S032.MATNR AS MATERIAL, 0 AS DER, 0 AS BAR, 0 AS HUM, 0 AS ECO, cast(S032.MBWBEST as int) AS SSO
FROM S032 LEFT JOIN
MARA ON S032.MATNR = MARA.MATNR
WHERE S032.WERKS = '1001'
AND S032.LGORT = 'ZZZZ'
AND S032.MBWBEST <> 0 AND S032.MBWBEST IS NOT NULL
AND S032.MATNR = '000000000100710046'
GROUP BY MARA.EAN11, S032.MATNR

El resultado que obtengo es este

ISBN MATERIAL DER BAR HUM ECO SSO
------------------ ------------------ ----------- ----------- ----------- ----------- -----------
9780060517120 000000000100710046 0 0 0 2 0
9780060517120 000000000100710046 0 1 0 0 0


Y el que quisiera obtenere sería este:

ISBN MATERIAL DER BAR HUM ECO SSO
------------------ ------------------ ----------- ----------- ----------- ----------- -----------
9780060517120 000000000100710046 0 1 0 2 0


Espero que alguien me pueda decir si es posible, como hacerlo, muchas gracias
  #2 (permalink)  
Antiguo 26/05/2011, 04:27
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: Seleccionar un registro de una query con UNION

¿Cómo sabes si coger los datos del primer o el segundo registro? Porque veo que quieres hacer una mezcla de ellos
  #3 (permalink)  
Antiguo 26/05/2011, 04:39
 
Fecha de Ingreso: febrero-2008
Mensajes: 22
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Seleccionar un registro de una query con UNION

Lo que tengo es una tabla con datos de un mismo material pero con distintos proveedores, y quiero en lugar de sacar un registro por material proveedor, sacar un registro por material y en ese mismo registro, lo que tengo de cada proveedor.

Por eso hago la UNION, porque quiero unir los datos por material de una sola vez.

Sobre lo que me preguntas, ninguna de las Select me vale de maestra, puesto que en la Where pongo las condiciones de cada proveedor, es decir, me puedo encontra un material en Bar y en Der, pero nada en el resto.

No se si esto te ayuda o no.
  #4 (permalink)  
Antiguo 26/05/2011, 05:13
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: Seleccionar un registro de una query con UNION

Por lo que veo, tu no quieres unir los datos, los quieres AGRUPAR por material, deberías usar un GROUP BY.

¿BAR y DER son proovedores? ¿Son columnas? ¿Puede haber varias columnas informadas en cada registro? En caso afirmativo ¿Cuál coges?
  #5 (permalink)  
Antiguo 26/05/2011, 05:35
 
Fecha de Ingreso: febrero-2008
Mensajes: 22
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Seleccionar un registro de una query con UNION

Ya he encontrado la solución y después de varias pruebas, para que me salga como queria, la select deber quedar así.

SELECT M.EAN11 AS ISBN, S.MATNR AS MATERIAL,
ISNULL((SELECT DER.MBWBEST
FROM S032 AS DER
WHERE DER.WERKS = '1003'
AND DER.LGORT = '1007' AND S.MATNR = DER.MATNR
AND DER.MBWBEST <> 0 AND DER.MBWBEST IS NOT NULL),0) AS DER,
ISNULL((SELECT BAR.MBWBEST
FROM S032 AS BAR
WHERE BAR.WERKS = '1002'
AND BAR.LGORT = '1006' AND S.MATNR = BAR.MATNR
AND BAR.MBWBEST <> 0 AND BAR.MBWBEST IS NOT NULL),0) AS BAR,
ISNULL((SELECT HUM.MBWBEST
FROM S032 AS HUM
WHERE HUM.WERKS = 'L001'
AND HUM.LGORT = '1002' AND S.MATNR = HUM.MATNR
AND HUM.MBWBEST <> 0 AND HUM.MBWBEST IS NOT NULL),0) AS HUM,
ISNULL((SELECT ECO.MBWBEST
FROM S032 AS ECO
WHERE ECO.WERKS = 'L001'
AND ECO.LGORT = '1003' AND S.MATNR = ECO.MATNR
AND ECO.MBWBEST <> 0 AND ECO.MBWBEST IS NOT NULL),0) AS ECO,
ISNULL((SELECT SSO.MBWBEST
FROM S032 AS SSO
WHERE SSO.WERKS = '1001'
AND SSO.LGORT = 'ZZZZ' AND S.MATNR = SSO.MATNR
AND SSO.MBWBEST <> 0 AND SSO.MBWBEST IS NOT NULL),0) AS SSO
FROM S032 AS S LEFT JOIN
MARA AS M ON S.MATNR = M.MATNR
WHERE S.MBWBEST <> 0 AND S.MBWBEST IS NOT NULL
GROUP BY M.EAN11, S.MATNR

de esta forma el resultado obtenido es este.

ISBN MATERIAL DER BAR HUM ECO SSO
------------------ ------------------ ----------------- ----------------- ----------------- ----------------- -----------------
9788498366099 000000000100860077 .000 3.000 .000 2.000 .000
9789586166058 000000000100675104 .000 .000 .000 2.000 42.000
9780844740195 000000000100040622 .000 .000 .000 .000 .000
9788430950355 000000000100864736 .000 1.000 .000 2.000 .000
9788436260502 000000000100878507 .000 4.000 1.000 .000 .000


De todas formas gracias, por la ayuda.

Etiquetas: query, registro, seleccionar, 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 11:59.