Subconsultas Repetidas en Querie

30/11/2006 - 22:44 por Natty | Informe spam
Hola:

Estamos relizando una migración de Anywhere a SQL Express, como
comprenderan no tengo mucha experiencia en esto, ahora el problema que
estoy enfrentando es que el querie que tengo realiza varias
subconsultas repetidas y a estas se les asigna un nombre por ejemplo

SELECT tabla1.columna1 as documento,
tabla2.columna2 as reporte,
(Select isnull(sum(tabla.importe),0)
From dba.tabla
where dba.tabla.clave = dba.tabla2.clave and
convert(smalldatetime,dba.tabla.fecha <'19000103') and
dba.tabla.estado =1) as suma,
.
.
.

(IF DATEDIFF(DAY, CONVERT(smalldatetime, dba.tabla.fecha), '19000102')
<= 0 THEN
tabla.cantidad + suma
ELSE
0
ENDIF) as Vencimiento

Ahora el problema es que la subconsulta llamada SUMA se llama como 8
veces en el Querie y Express no acepta estos nombres.

*Si lo sustituyo por la subconsulta completa no resulta ya se vuelve
extremadamente lenta.
*He intentado de igual forma con Procedimientos Almacenados y no ha
funcionado.


Alguna sugerencia

Saludos

Preguntas similare

Leer las respuestas

#1 Natty
01/12/2006 - 00:58 | Informe spam
Alejandro Mesa:

Gracias por la sugerencia voy a checar el ejemplo que utilizas
Respuesta Responder a este mensaje
#2 Javier Loria
01/12/2006 - 13:38 | Informe spam
Hola:
Nada mas para agregar a la excelente respuesta de Alejandro, que en SQL
tambien puedes usar common table expression, que son mas legibles:
==-- usando with
WITH UnaTabla(Uno)
AS
(
SELECT 1
)
SELECT Uno, Uno+1 FROM UnaTabla
== Saludos,

Javier Loria
Costa Rica-MVP
Solid Quality Learning


"Alejandro Mesa" wrote in message
news:
Natty,

Asi es, no se puede referenciar el alias que le das a una columna de
lista,
en otra columna de la misma lista de columnas de esa sentencia "select".
Una
forma es hacer lo que ya intentastes, usar la subconsulta en vez de el
alias.
Otra forma es usando la sentencia original como una tabla derivada y hacer
la
referencia en la segunta sentencia "select".

Ejemplo:

select 1 as uno, [uno] + as dos

select [uno], [uno] + 1 as [dos]
from (select 1 as [uno]) as t
go


use northwind
go

select *
from (
select orderid, productid, (quantity * unitprice) * (1.00 - discount) as
precio_extendido
from dbo.[order details]
) as t
where precio_extendido > 50.00
go


AMB

"Natty" wrote:

Hola:

Estamos relizando una migración de Anywhere a SQL Express, como
comprenderan no tengo mucha experiencia en esto, ahora el problema que
estoy enfrentando es que el querie que tengo realiza varias
subconsultas repetidas y a estas se les asigna un nombre por ejemplo

SELECT tabla1.columna1 as documento,
tabla2.columna2 as reporte,
(Select isnull(sum(tabla.importe),0)
From dba.tabla
where dba.tabla.clave = dba.tabla2.clave and
convert(smalldatetime,dba.tabla.fecha <>> '19000103') and
dba.tabla.estado =1) as suma,
.
.
.

(IF DATEDIFF(DAY, CONVERT(smalldatetime, dba.tabla.fecha), '19000102')
<= 0 THEN
tabla.cantidad + suma
ELSE
0
ENDIF) as Vencimiento

Ahora el problema es que la subconsulta llamada SUMA se llama como 8
veces en el Querie y Express no acepta estos nombres.

*Si lo sustituyo por la subconsulta completa no resulta ya se vuelve
extremadamente lenta.
*He intentado de igual forma con Procedimientos Almacenados y no ha
funcionado.


Alguna sugerencia

Saludos


Respuesta Responder a este mensaje
#3 Natty
05/12/2006 - 17:56 | Informe spam
Hola Javier y Alejandro:

Muchisimas gracias por los consejos estan muy buenos y ya resolvi mi
problemita.

Saludos!
Respuesta Responder a este mensaje
#4 Natty
05/12/2006 - 17:58 | Informe spam
Hola Javier y Alejandro:

Muchisimas gracias por los consejos estan muy buenos y ya resolvi mi
problemita.

Saludos!
Respuesta Responder a este mensaje
#5 Natty
11/12/2006 - 23:52 | Informe spam
Hola otravez tengo otra duda espero puedan apoyarme, como defino
dentro de la intruccion WITH otra subconsulta, con diferente nombre?

Por ejemplo tengo:

WITH DirReps(ManagerID) AS
(
SELECT ManagerID,COUNT(*)
FROM HumanResources.Employee AS e
WHERE ManagerID IS NOT NULL
GROUP BY ManagerID
)
SELECT ManagerID,
(DBA.cxc.importe + ManagerID) as TOTAL
FROM DirReps
WHERE TOTAL<> 0
ORDER BY ManagerID;
GO

Como veran tengo otra subconsulta que ocupa: 'ManagerID' llamada TOTAL,
el cual necesito dentro del WHERE.

Puedo declarar dentro de With la subconsulta TOTAL? y como le hago?
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida