Duda con valores de subconsultas..

08/04/2005 - 19:17 por K | Informe spam
Hola grupo una pequeña pregunta tengo esta consulta que hasta ahora
esta bien (bueno para mi) :-), como ven las dos ultimas columnas son
subconsultas.

Bueno quiero sacar una columna mas en la que tengo que hacer comparaciones
con esas 2 , el punto es que no quiero estar haciendo
la subconsulta para cada comparacion que tenga que hacer, no hay una
forma de guardar los datos que ya me devolvio en las columnas que saque
y trabajar con esos valores...

Muchas Gracias por su ayuda

DECLARE @IGV DECIMAL(10,2), @Mes INT, @Año INT
SET @IGV=(19.00 + 100)/100
SET @Mes = 1
SET @Año = 2005

SELECT DFVenta.[Rec Nº], FOS.Cliente, FOS.Estado,
RIGHT('000' + CONVERT(NVARCHAR(3),F.SerieCotizacion),3) +
RIGHT('0000000' + CONVERT(NVARCHAR(7),F.NumeroCotizacion),7)
AS [Nº Cotizacion],
DFVenta.CT, ROUND(DFVenta.CT/ @IGV,2) AS [Pago sin IGV],
(SELECT TOP 1ROUND(DFV2.CT/@IGV,2)
FROM DFVenta DFV2 WHERE DFV2.Fecha < DFVenta.Fecha AND
DFV2.SerieCotizacionßVenta.SerieCotizacion AND
DFV2.NumeroCotizacionßVenta.NumeroCotizacion)
AS [PAGO ANT LUCES],ROUND(DFVenta.CT/ @IGV,2) +
(SELECT TOP 1ROUND(DFV2.CT/@IGV,2)
FROM DFVenta DFV2 WHERE DFV2.Fecha < DFVenta.Fecha AND
DFV2.SerieCotizacionßVenta.SerieCotizacion AND
DFV2.NumeroCotizacionßVenta.NumeroCotizacion) AS [Total Luces
Pagadas],
FROM Factura F INNER JOIN FichaObra_SubTotal FOS ON
F.SerieCotizacion = FOS.SerieFichaObra AND
F.NumeroCotizacion = FOS.NumeroFichaObra INNER JOIN
DFVenta ON F.SerieCotizacion = DFVenta.SerieCotizacion AND
F.NumeroCotizacion = DFVenta.NumeroCotizacion
WHERE MONTH(DFVenta.Fecha)=@Mes AND YEAR(DFVenta.Fecha)=@Año
AND LEFT(FOS.Cliente,2)='TN'
GROUP BY DFVenta.[Rec Nº], FOS.Cliente, FOS.Estado,
RIGHT('000' + CONVERT(NVARCHAR(3),F.SerieCotizacion),3) +
RIGHT('0000000' + CONVERT(NVARCHAR(7),F.NumeroCotizacion),7) ,
DFVenta.CT, ROUND(DFVenta.CT/
@IGV,2),DFVenta.Fecha,DFVenta.SerieCotizacion,
DFVenta.NumeroCotizacion
ORDER BY DFVenta.NumeroCotizacion

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
08/04/2005 - 19:35 | Informe spam
Si. Usa el resultado del query como una tabla derivada.

Ejemplo:

select ..., [PAGO ANT LUCES], [Total Luces Pagadas]
from (tu query sin order by) as t
order by ...


AMB


"" wrote:

Hola grupo una pequeña pregunta tengo esta consulta que hasta ahora
esta bien (bueno para mi) :-), como ven las dos ultimas columnas son
subconsultas.

Bueno quiero sacar una columna mas en la que tengo que hacer comparaciones
con esas 2 , el punto es que no quiero estar haciendo
la subconsulta para cada comparacion que tenga que hacer, no hay una
forma de guardar los datos que ya me devolvio en las columnas que saque
y trabajar con esos valores...

Muchas Gracias por su ayuda

DECLARE @IGV DECIMAL(10,2), @Mes INT, @Año INT
SET @IGV=(19.00 + 100)/100
SET @Mes = 1
SET @Año = 2005

SELECT DFVenta.[Rec Nº], FOS.Cliente, FOS.Estado,
RIGHT('000' + CONVERT(NVARCHAR(3),F.SerieCotizacion),3) +
RIGHT('0000000' + CONVERT(NVARCHAR(7),F.NumeroCotizacion),7)
AS [Nº Cotizacion],
DFVenta.CT, ROUND(DFVenta.CT/ @IGV,2) AS [Pago sin IGV],
(SELECT TOP 1ROUND(DFV2.CT/@IGV,2)
FROM DFVenta DFV2 WHERE DFV2.Fecha < DFVenta.Fecha AND
DFV2.SerieCotizacionßVenta.SerieCotizacion AND
DFV2.NumeroCotizacionßVenta.NumeroCotizacion)
AS [PAGO ANT LUCES],ROUND(DFVenta.CT/ @IGV,2) +
(SELECT TOP 1ROUND(DFV2.CT/@IGV,2)
FROM DFVenta DFV2 WHERE DFV2.Fecha < DFVenta.Fecha AND
DFV2.SerieCotizacionßVenta.SerieCotizacion AND
DFV2.NumeroCotizacionßVenta.NumeroCotizacion) AS [Total Luces
Pagadas],
FROM Factura F INNER JOIN FichaObra_SubTotal FOS ON
F.SerieCotizacion = FOS.SerieFichaObra AND
F.NumeroCotizacion = FOS.NumeroFichaObra INNER JOIN
DFVenta ON F.SerieCotizacion = DFVenta.SerieCotizacion AND
F.NumeroCotizacion = DFVenta.NumeroCotizacion
WHERE MONTH(DFVenta.Fecha)=@Mes AND YEAR(DFVenta.Fecha)=@Año
AND LEFT(FOS.Cliente,2)='TN'
GROUP BY DFVenta.[Rec Nº], FOS.Cliente, FOS.Estado,
RIGHT('000' + CONVERT(NVARCHAR(3),F.SerieCotizacion),3) +
RIGHT('0000000' + CONVERT(NVARCHAR(7),F.NumeroCotizacion),7) ,
DFVenta.CT, ROUND(DFVenta.CT/
@IGV,2),DFVenta.Fecha,DFVenta.SerieCotizacion,
DFVenta.NumeroCotizacion
ORDER BY DFVenta.NumeroCotizacion



Respuesta Responder a este mensaje
#2 K
08/04/2005 - 19:54 | Informe spam
Dejame entender esa parte de (tu query sin order by) te refieres
a mi consulta dentro de ella misma.

Bueno si es asi, la consulta aun no la he creado solo la estoy
probando en el Analizador .

Gracias por tu respuesta, voy a probar

"Alejandro Mesa" escribió en el
mensaje news:
Si. Usa el resultado del query como una tabla derivada.

Ejemplo:

select ..., [PAGO ANT LUCES], [Total Luces Pagadas]
from (tu query sin order by) as t
order by ...


AMB


"" wrote:

> Hola grupo una pequeña pregunta tengo esta consulta que hasta ahora
> esta bien (bueno para mi) :-), como ven las dos ultimas columnas son
> subconsultas.
>
> Bueno quiero sacar una columna mas en la que tengo que hacer


comparaciones
> con esas 2 , el punto es que no quiero estar haciendo
> la subconsulta para cada comparacion que tenga que hacer, no hay una
> forma de guardar los datos que ya me devolvio en las columnas que saque
> y trabajar con esos valores...
>
> Muchas Gracias por su ayuda
>
> DECLARE @IGV DECIMAL(10,2), @Mes INT, @Año INT
> SET @IGV=(19.00 + 100)/100
> SET @Mes = 1
> SET @Año = 2005
>
> SELECT DFVenta.[Rec Nº], FOS.Cliente, FOS.Estado,
> RIGHT('000' + CONVERT(NVARCHAR(3),F.SerieCotizacion),3) +
> RIGHT('0000000' + CONVERT(NVARCHAR(7),F.NumeroCotizacion),7)
> AS [Nº Cotizacion],
> DFVenta.CT, ROUND(DFVenta.CT/ @IGV,2) AS [Pago sin IGV],
> (SELECT TOP 1ROUND(DFV2.CT/@IGV,2)
> FROM DFVenta DFV2 WHERE DFV2.Fecha < DFVenta.Fecha AND
> DFV2.SerieCotizacionßVenta.SerieCotizacion AND
> DFV2.NumeroCotizacionßVenta.NumeroCotizacion)
> AS [PAGO ANT LUCES],ROUND(DFVenta.CT/ @IGV,2) +
> (SELECT TOP 1ROUND(DFV2.CT/@IGV,2)
> FROM DFVenta DFV2 WHERE DFV2.Fecha < DFVenta.Fecha AND
> DFV2.SerieCotizacionßVenta.SerieCotizacion AND
> DFV2.NumeroCotizacionßVenta.NumeroCotizacion) AS [Total Luces
> Pagadas],
> FROM Factura F INNER JOIN FichaObra_SubTotal FOS ON
> F.SerieCotizacion = FOS.SerieFichaObra AND
> F.NumeroCotizacion = FOS.NumeroFichaObra INNER JOIN
> DFVenta ON F.SerieCotizacion = DFVenta.SerieCotizacion AND
> F.NumeroCotizacion = DFVenta.NumeroCotizacion
> WHERE MONTH(DFVenta.Fecha)=@Mes AND YEAR(DFVenta.Fecha)=@Año
> AND LEFT(FOS.Cliente,2)='TN'
> GROUP BY DFVenta.[Rec Nº], FOS.Cliente, FOS.Estado,
> RIGHT('000' + CONVERT(NVARCHAR(3),F.SerieCotizacion),3) +
> RIGHT('0000000' + CONVERT(NVARCHAR(7),F.NumeroCotizacion),7) ,
> DFVenta.CT, ROUND(DFVenta.CT/
> @IGV,2),DFVenta.Fecha,DFVenta.SerieCotizacion,
> DFVenta.NumeroCotizacion
> ORDER BY DFVenta.NumeroCotizacion
>
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
08/04/2005 - 20:25 | Informe spam
Lo que quise decir fue que en el analizador, uses la consulta que posteastes
como una tabla derivada. No tiene sentido usar ORDER BY en la consulta usada
como tabla derivada, sino que debes usar el ORDER BY en la senetencia mas
externa.

Ejemplo:

use northwind
go

select
orderid,
(colB - colA) as colC
from
(
select
orderid,
year(orderdate) as colA,
year(shippeddate) as colB
from
dbo.orders
) as t
order by
colC
go

select
orderid,
(colB - colA) as colC
from
(
select
orderid,
year(orderdate) as colA,
year(shippeddate) as colB
from
dbo.orders
order by
orderid
) as t
order by
colC
go


AMB

"" wrote:

Dejame entender esa parte de (tu query sin order by) te refieres
a mi consulta dentro de ella misma.

Bueno si es asi, la consulta aun no la he creado solo la estoy
probando en el Analizador .

Gracias por tu respuesta, voy a probar

"Alejandro Mesa" escribió en el
mensaje news:
> Si. Usa el resultado del query como una tabla derivada.
>
> Ejemplo:
>
> select ..., [PAGO ANT LUCES], [Total Luces Pagadas]
> from (tu query sin order by) as t
> order by ...
>
>
> AMB
>
>
> "" wrote:
>
> > Hola grupo una pequeña pregunta tengo esta consulta que hasta ahora
> > esta bien (bueno para mi) :-), como ven las dos ultimas columnas son
> > subconsultas.
> >
> > Bueno quiero sacar una columna mas en la que tengo que hacer
comparaciones
> > con esas 2 , el punto es que no quiero estar haciendo
> > la subconsulta para cada comparacion que tenga que hacer, no hay una
> > forma de guardar los datos que ya me devolvio en las columnas que saque
> > y trabajar con esos valores...
> >
> > Muchas Gracias por su ayuda
> >
> > DECLARE @IGV DECIMAL(10,2), @Mes INT, @Año INT
> > SET @IGV=(19.00 + 100)/100
> > SET @Mes = 1
> > SET @Año = 2005
> >
> > SELECT DFVenta.[Rec Nº], FOS.Cliente, FOS.Estado,
> > RIGHT('000' + CONVERT(NVARCHAR(3),F.SerieCotizacion),3) +
> > RIGHT('0000000' + CONVERT(NVARCHAR(7),F.NumeroCotizacion),7)
> > AS [Nº Cotizacion],
> > DFVenta.CT, ROUND(DFVenta.CT/ @IGV,2) AS [Pago sin IGV],
> > (SELECT TOP 1ROUND(DFV2.CT/@IGV,2)
> > FROM DFVenta DFV2 WHERE DFV2.Fecha < DFVenta.Fecha AND
> > DFV2.SerieCotizacionßVenta.SerieCotizacion AND
> > DFV2.NumeroCotizacionßVenta.NumeroCotizacion)
> > AS [PAGO ANT LUCES],ROUND(DFVenta.CT/ @IGV,2) +
> > (SELECT TOP 1ROUND(DFV2.CT/@IGV,2)
> > FROM DFVenta DFV2 WHERE DFV2.Fecha < DFVenta.Fecha AND
> > DFV2.SerieCotizacionßVenta.SerieCotizacion AND
> > DFV2.NumeroCotizacionßVenta.NumeroCotizacion) AS [Total Luces
> > Pagadas],
> > FROM Factura F INNER JOIN FichaObra_SubTotal FOS ON
> > F.SerieCotizacion = FOS.SerieFichaObra AND
> > F.NumeroCotizacion = FOS.NumeroFichaObra INNER JOIN
> > DFVenta ON F.SerieCotizacion = DFVenta.SerieCotizacion AND
> > F.NumeroCotizacion = DFVenta.NumeroCotizacion
> > WHERE MONTH(DFVenta.Fecha)=@Mes AND YEAR(DFVenta.Fecha)=@Año
> > AND LEFT(FOS.Cliente,2)='TN'
> > GROUP BY DFVenta.[Rec Nº], FOS.Cliente, FOS.Estado,
> > RIGHT('000' + CONVERT(NVARCHAR(3),F.SerieCotizacion),3) +
> > RIGHT('0000000' + CONVERT(NVARCHAR(7),F.NumeroCotizacion),7) ,
> > DFVenta.CT, ROUND(DFVenta.CT/
> > @IGV,2),DFVenta.Fecha,DFVenta.SerieCotizacion,
> > DFVenta.NumeroCotizacion
> > ORDER BY DFVenta.NumeroCotizacion
> >
> >
> >



Respuesta Responder a este mensaje
#4 K
09/04/2005 - 00:52 | Informe spam
Muchas gracias Alejandro me sirvio de mucho

Salu2


"Alejandro Mesa" escribió en el
mensaje news:
Lo que quise decir fue que en el analizador, uses la consulta que


posteastes
como una tabla derivada. No tiene sentido usar ORDER BY en la consulta


usada
como tabla derivada, sino que debes usar el ORDER BY en la senetencia mas
externa.

Ejemplo:

use northwind
go

select
orderid,
(colB - colA) as colC
from
(
select
orderid,
year(orderdate) as colA,
year(shippeddate) as colB
from
dbo.orders
) as t
order by
colC
go

select
orderid,
(colB - colA) as colC
from
(
select
orderid,
year(orderdate) as colA,
year(shippeddate) as colB
from
dbo.orders
order by
orderid
) as t
order by
colC
go


AMB

"" wrote:

> Dejame entender esa parte de (tu query sin order by) te refieres
> a mi consulta dentro de ella misma.
>
> Bueno si es asi, la consulta aun no la he creado solo la estoy
> probando en el Analizador .
>
> Gracias por tu respuesta, voy a probar
>
> "Alejandro Mesa" escribió en


el
> mensaje news:
> > Si. Usa el resultado del query como una tabla derivada.
> >
> > Ejemplo:
> >
> > select ..., [PAGO ANT LUCES], [Total Luces Pagadas]
> > from (tu query sin order by) as t
> > order by ...
> >
> >
> > AMB
> >
> >
> > "" wrote:
> >
> > > Hola grupo una pequeña pregunta tengo esta consulta que hasta ahora
> > > esta bien (bueno para mi) :-), como ven las dos ultimas columnas son
> > > subconsultas.
> > >
> > > Bueno quiero sacar una columna mas en la que tengo que hacer
> comparaciones
> > > con esas 2 , el punto es que no quiero estar haciendo
> > > la subconsulta para cada comparacion que tenga que hacer, no hay una
> > > forma de guardar los datos que ya me devolvio en las columnas que


saque
> > > y trabajar con esos valores...
> > >
> > > Muchas Gracias por su ayuda
> > >
> > > DECLARE @IGV DECIMAL(10,2), @Mes INT, @Año INT
> > > SET @IGV=(19.00 + 100)/100
> > > SET @Mes = 1
> > > SET @Año = 2005
> > >
> > > SELECT DFVenta.[Rec Nº], FOS.Cliente, FOS.Estado,
> > > RIGHT('000' + CONVERT(NVARCHAR(3),F.SerieCotizacion),3) +
> > > RIGHT('0000000' + CONVERT(NVARCHAR(7),F.NumeroCotizacion),7)
> > > AS [Nº Cotizacion],
> > > DFVenta.CT, ROUND(DFVenta.CT/ @IGV,2) AS [Pago sin IGV],
> > > (SELECT TOP 1ROUND(DFV2.CT/@IGV,2)
> > > FROM DFVenta DFV2 WHERE DFV2.Fecha < DFVenta.Fecha AND
> > > DFV2.SerieCotizacionßVenta.SerieCotizacion AND
> > > DFV2.NumeroCotizacionßVenta.NumeroCotizacion)
> > > AS [PAGO ANT LUCES],ROUND(DFVenta.CT/ @IGV,2) +
> > > (SELECT TOP 1ROUND(DFV2.CT/@IGV,2)
> > > FROM DFVenta DFV2 WHERE DFV2.Fecha < DFVenta.Fecha AND
> > > DFV2.SerieCotizacionßVenta.SerieCotizacion AND
> > > DFV2.NumeroCotizacionßVenta.NumeroCotizacion) AS [Total Luces
> > > Pagadas],
> > > FROM Factura F INNER JOIN FichaObra_SubTotal FOS ON
> > > F.SerieCotizacion = FOS.SerieFichaObra AND
> > > F.NumeroCotizacion = FOS.NumeroFichaObra INNER JOIN
> > > DFVenta ON F.SerieCotizacion = DFVenta.SerieCotizacion AND
> > > F.NumeroCotizacion = DFVenta.NumeroCotizacion
> > > WHERE MONTH(DFVenta.Fecha)=@Mes AND YEAR(DFVenta.Fecha)=@Año
> > > AND LEFT(FOS.Cliente,2)='TN'
> > > GROUP BY DFVenta.[Rec Nº], FOS.Cliente, FOS.Estado,
> > > RIGHT('000' + CONVERT(NVARCHAR(3),F.SerieCotizacion),3) +
> > > RIGHT('0000000' + CONVERT(NVARCHAR(7),F.NumeroCotizacion),7) ,
> > > DFVenta.CT, ROUND(DFVenta.CT/
> > > @IGV,2),DFVenta.Fecha,DFVenta.SerieCotizacion,
> > > DFVenta.NumeroCotizacion
> > > ORDER BY DFVenta.NumeroCotizacion
> > >
> > >
> > >
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida