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

Ayuda!¿Como uno estas dos consultas?

Estas en el tema de Ayuda!¿Como uno estas dos consultas? en el foro de SQL Server en Foros del Web. Buenas tardes a tod@s, me gustaría pediros ayuda y para eso se que es muy importante explicaros bien el problema, así que espero hacerlo lo ...
  #1 (permalink)  
Antiguo 11/08/2011, 09:44
 
Fecha de Ingreso: agosto-2011
Mensajes: 3
Antigüedad: 12 años, 8 meses
Puntos: 0
Pregunta Ayuda!¿Como uno estas dos consultas?

Buenas tardes a tod@s,

me gustaría pediros ayuda y para eso se que es muy importante explicaros bien el problema, así que espero hacerlo lo mejor posible.

Tengo que dos consultas que por separado funcionan perfectamente, pero no se como ejecutarlas de manera conjunta.

La situación es la siguiente: en la CONSULTA1 se obtienen un conjunto de información de TODAS las ofertas que reunen una serie de requisitos. En la CONSULTA2 se realiza el cálculo de dos fórmulas para UNA única oferta introducida como parámetro cuando se ejecuta la consulta.

El problema está en que no se como hacer para que el cálculo de las fórmulas de la CONSULTA2 se realice en TODAS las ofertas de la CONSULTA1. ¿Me entendeis?

Estas son las consultas:

CONSULTA1
SELECT
T0.DocNum as Oferta,
T1.SlpName as Comercial,
T2.Zipcode as CP,
T2.City as Poblacion
FROM
OQUT T0 LEFT JOIN OSLP T1 ON T0.SlpCode = T1.SlpCode
LEFT JOIN CRD1 T2 ON T0.CardCode = T2.CardCode
WHERE
T0.Series = '613' and T2.Address LIKE 'FACTUR%'


CONSULTA2

SELECT
STR (Cuentas1.Neto/Cuentas1.Coste,10,3) as FMT,
STR (Cuentas2.Neto/Cuentas2.Coste,10,3) as FMO
FROM (
SELECT
sum(T1.LineTotal) as Neto,
sum(T1.GrossBuyPr*T1.Quantity) as Coste
FROM
OQUT T0 INNER JOIN QUT1 T1 ON T0.DocEntry = T1.DocEntry
WHERE
T0.DocNum = '[%0]' and T1.Itemcode not in ('10000025','99999999')
) as Cuentas1,
(
SELECT
sum(T1.LineTotal) as Neto,
sum(T1.GrossBuyPr*T1.Quantity) as Coste
FROM
OQUT T0 INNER JOIN QUT1 T1 ON T0.DocEntry = T1.DocEntry
WHERE
T0.DocNum = '[%0]' and T1.Itemcode ='10000025'
) as Cuentas2

Donde [%0] es la oferta que se introduce manualmente al ejecutar la consulta.

¿Como puedo unir estas consultas para que en vez de tener que pasar la oferta como parámetro de una en una haga el cálculo para todas las resultantes a la vez de la CONSULTA1?

Si necesitais que amplie alguna información decidmelo.

Muchísimas gracias de antemano. Un saludo.
  #2 (permalink)  
Antiguo 11/08/2011, 10:23
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: Ayuda!¿Como uno estas dos consultas?

A lo que veo puedes hacer lo sig:

Código SQL:
Ver original
  1. SELECT
  2. T0.DocNum AS Oferta,
  3. T1.SlpName AS Comercial,
  4. T2.Zipcode AS CP,
  5. T2.City AS Poblacion
  6. INTO #temp
  7. FROM
  8. OQUT T0 LEFT JOIN OSLP T1 ON T0.SlpCode = T1.SlpCode
  9. LEFT JOIN CRD1 T2 ON T0.CardCode = T2.CardCode
  10. WHERE
  11. T0.Series = '613' AND T2.Address LIKE 'FACTUR%'
  12.  
  13.  
  14. SELECT
  15. STR (Cuentas1.Neto/Cuentas1.Coste,10,3) AS FMT,
  16. STR (Cuentas2.Neto/Cuentas2.Coste,10,3) AS FMO
  17. FROM (
  18. SELECT
  19. SUM(T1.LineTotal) AS Neto,
  20. SUM(T1.GrossBuyPr*T1.Quantity) AS Coste
  21. FROM
  22. OQUT T0 INNER JOIN QUT1 T1 ON T0.DocEntry = T1.DocEntry
  23. WHERE
  24. T0.DocNum EXISTS (SELECT * FROM #temp) AND T1.Itemcode NOT IN ('10000025','99999999')
  25. ) AS Cuentas1,
  26. (
  27. SELECT
  28. SUM(T1.LineTotal) AS Neto,
  29. SUM(T1.GrossBuyPr*T1.Quantity) AS Coste
  30. FROM
  31. OQUT T0 INNER JOIN QUT1 T1 ON T0.DocEntry = T1.DocEntry
  32. WHERE
  33. T0.DocNum EXISTS (SELECT * FROM #temp) AND T1.Itemcode ='10000025'
  34. ) AS Cuentas2

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 12/08/2011, 00:58
 
Fecha de Ingreso: agosto-2011
Mensajes: 3
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Ayuda!¿Como uno estas dos consultas?

Buenos días Libras, y gracias por tu rápida respuesta!!!!

Pero creo que tu solución está orientada a obtener la CONSULTA2 de los datos en común con la CONSULTA1. Lo que quiero es incluir en todas las filas resultantes de la CONSULTA1 el resultado de la CONSULTA2.

¿Como sería?

Gracias de nuevo, y un saludo.
  #4 (permalink)  
Antiguo 12/08/2011, 07:27
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: Ayuda!¿Como uno estas dos consultas?

Datos de tus tablas y que quieres obtener? porque asi nada mas con le query es dificil saber que es lo que necesitas.


Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 12/08/2011, 07:57
Avatar de vrenzo  
Fecha de Ingreso: febrero-2007
Mensajes: 289
Antigüedad: 17 años, 2 meses
Puntos: 15
Respuesta: Ayuda!¿Como uno estas dos consultas?

Serira con Union si ambas consultas tubieran la misma estructura...

Cita:
SELECT * FROM Table1
UNION
SELECT * FROM Table2
__________________
***
Saludos.
  #6 (permalink)  
Antiguo 16/08/2011, 10:47
 
Fecha de Ingreso: agosto-2011
Mensajes: 3
Antigüedad: 12 años, 8 meses
Puntos: 0
Mensaje Respuesta: Ayuda!¿Como uno estas dos consultas?

Hola de nuevo, y muchas gracias por vuestras respuestas!

- vrenzo: Me temo que no sirve la opción UNION porque me muestra el resultado de la CONSULTA2 en la primera fila y luego me muestra todas las filas resultantes de la CONSULTA1...


- Libras: la estructura de las tablas y campos que necesito incluir es la siguiente:
Código:
* OQUT // tabla ofertas con los siguientes campos
		-DocEntry; //número interno de oferta para el sistema
		-DocNum; //número de documento
		-CardCode; //cliente de la oferta
		-Series; //tipo de oferta
	* QUT1 // tabla líneas de oferta
		- DocEntry; //número interno de oferta para el sistema
		- Itemcode; //número de artículo de la línea
		- Linetotal; //precio total de la línea
		- GrossBuyPr; //beneficio bruto de la línea
		- Quantity; //cantidad de artículos de la línea
	* OSLP //tabla con los comerciales de la empresa
		- SlpCode; //código de comercial
		- SlpName; //nombre del comercial
	* CRD1 //tabla con las direcciones de los clientes
		- CardCode; //código de cliente
		- Zipcode; //código postal de la dirección 
		- City; //ciudad de la dirección
		- Address; //tipo de dirección
Lo que quiero es que me realice los cálculos que habéis visto en la CONSULTA2 pero para TODAS las ofertas resultantes de la CONSULTA1 (las que cumplen una serie de condiciones). Si necesitas algo más avísame.

¿Como puedo hacerlo? Ayuda por favor.

Mil gracias de antemano. Un saludo.

Etiquetas: sbo, server, sql
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 12:34.