Campo derivado y vistas parametrizadas

15/07/2004 - 03:07 por Gustavo Monasterios | Informe spam
1)¿Como puedo hacer para agregar en una consulta un campo
que dependa del valor de otro dentro de la misma
consulta. Es decir que por ejemplo, contenga "Gano" si
otro campo es >=0 y "Perdio" si es menor?

2)¿Puedo crear en SQL Server vistas que tengan
parámetros, como las consultas de access?

Preguntas similare

Leer las respuestas

#1 Javier Loria
15/07/2004 - 03:50 | Informe spam
Hola Gustavo:
1) Consulta que usa un valor de otra columna:
SELECT ..., CASE WHEN Columna1>=0 THEN 'Gano'
THEN 'Perdio' END AS Resultado
FROM
2) No no existen estas consultas, normalmente no son necesarias porque el
poner en el WHERE las condiciones se hacen los filtros.
= SELECT
FROM MiVista
WHERE Columna='XXX'
= En la consulta anterior no es cierto que el SQL primero construya la
vista y luega la filtra, sino internamente toma el WHERE y lo "incorpora" al
SELECT que construyo la vista.
Si siempre quieres usar parametros puedes usar las Funciones en Linea
que son como vistas con parametros y se usan como vistas/tablas
parametrizadas
==-- Declaracion
CREATE FUNCTION MiFuncion(
@Parametro CHAR(4)
)
RETURNS TABLE
AS
RETURN SELECT FROM Tabla WHERE Columna=@Parametro
GO
SELECT ...
FROM dbo.MiFuncion('XXX')
== Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Gustavo Monasterios escribio:
1)¿Como puedo hacer para agregar en una consulta un campo
que dependa del valor de otro dentro de la misma
consulta. Es decir que por ejemplo, contenga "Gano" si
otro campo es >=0 y "Perdio" si es menor?

2)¿Puedo crear en SQL Server vistas que tengan
parámetros, como las consultas de access?
Respuesta Responder a este mensaje
#2 Isaías
15/07/2004 - 03:52 | Informe spam
1)

SELECT MyValor = CASE WHEN MyValor >= THEN 'GANO'
ELSE 'PERDIO' FROM MYTABA

2)

Para hacer "vistas" con parametros, debe hacerlo mediante
funciones

CREATE FUNCTION fn_SalesByStore (@storeid varchar(30))
RETURNS TABLE
AS
RETURN (SELECT title, qty
FROM sales s, titles t
WHERE s.stor_id = @storeid and
t.title_id = s.title_id)

Para usarla:

SELECT title, qty FROM dbo.fn_SalesByStore('SEARS')
Respuesta Responder a este mensaje
#3 Gustavo Monasterios
15/07/2004 - 20:39 | Informe spam
He intentado hacer lo que me dicen usando CASe pero me
genera un error, imagino que sucede porque es una
consulta de datos agrupados, esta es:

SELECT
dbo.VENTALOTERIAS.EntidadID AS dpaEntidadId,
dbo.ENTIDADES.Entidad AS dpaEntidad,
dbo.VENTALOTERIAS.FechaVentaLoterias AS dpaFecha,
SUM(dbo.VENTALOTERIAS.TotalTriples) + SUM
(dbo.VENTALOTERIAS.TotalTerminales) AS dpaVentas,
SUM(dbo.VENTALOTERIAS.BsComision) AS dpaComision,
SUM(dbo.VENTALOTERIAS.BsTerminal1) + SUM
(dbo.VENTALOTERIAS.BsTerminal2) + SUM
(dbo.VENTALOTERIAS.BsTerminal3)+ SUM
(dbo.VENTALOTERIAS.BsTriple1) + SUM
(dbo.VENTALOTERIAS.BsTriple2) + SUM
(dbo.VENTALOTERIAS.BsTriple3) AS dpaPremios,
SUM(dbo.VENTALOTERIAS.TotalTriples) + SUM
(dbo.VENTALOTERIAS.TotalTerminales) - SUM
(dbo.VENTALOTERIAS.BsComision)- SUM
(dbo.VENTALOTERIAS.BsTerminal1) - SUM
(dbo.VENTALOTERIAS.BsTerminal2) - SUM
(dbo.VENTALOTERIAS.BsTerminal3) - SUM
(dbo.VENTALOTERIAS.BsTriple1) - SUM
(dbo.VENTALOTERIAS.BsTriple2) - SUM
(dbo.VENTALOTERIAS.BsTriple3) AS dpaNeto,
SUM(dbo.VENTALOTERIAS.BsParticipacion) AS
dpaParticipacion,
SUM(dbo.VENTALOTERIAS.TotalTriples) + SUM
(dbo.VENTALOTERIAS.TotalTerminales)- SUM
(dbo.VENTALOTERIAS.BsComision) - SUM
(dbo.VENTALOTERIAS.BsTerminal1) - SUM
(dbo.VENTALOTERIAS.BsTerminal2)- SUM
(dbo.VENTALOTERIAS.BsTerminal3) - SUM
(dbo.VENTALOTERIAS.BsTriple1) - SUM
(dbo.VENTALOTERIAS.BsTriple2) - SUM
(dbo.VENTALOTERIAS.BsTriple3) - SUM
(dbo.VENTALOTERIAS.BsParticipacion) AS dpaSaldo,
CASE WHEN dpaSaldo>=0 THEN 'Gano' ELSE 'Perdio' END AS
dpaEstado
FROM dbo.VENTALOTERIAS INNER JOIN
dbo.ENTIDADES ON dbo.VENTALOTERIAS.EntidadID =
dbo.ENTIDADES.EntidadID
GROUP BY dbo.VENTALOTERIAS.EntidadID,
dbo.ENTIDADES.Entidad,
dbo.VENTALOTERIAS.FechaVentaLoterias

Como pueden ver me da un error en el case y además he
tenido que reutilizar los mismos calculos para generar
campos que podrian ser calculados a traves de otros.
Respuesta Responder a este mensaje
#4 Javier Loria
16/07/2005 - 04:39 | Informe spam
Hola Gustavo:
El SQL no permite el uso de alias, para luego usar en la misma consulta
el alias. :(
Esto significa que tienes dos alternativas:
a) Vuelves a repetir el SUM(VentaLoterias). en el CASE.
b) Haces una subconsulta.
=SELECT dpaEntidadID
, dpaEntidad
, dpaFecha
, dpaVentas
, dpaComision
, dpaPremios
, dpaNeto
, dpaParticipacion
, dpaSaldo
, CASE WHEN dpaSaldo THEN 'Gano'
ELSE 'Perdio'
END AS dpaEstado
FROM (SELECT VentaLoterias.EntidadID AS dpaEntidadID
, ..
FROM
INNER JOIN ...
ON
GROUP BY ...
) AS SubConsulta
= Espero te sirva,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Gustavo Monasterios escribio:
He intentado hacer lo que me dicen usando CASe pero me
genera un error, imagino que sucede porque es una
consulta de datos agrupados, esta es:

SELECT
dbo.VENTALOTERIAS.EntidadID AS dpaEntidadId,
dbo.ENTIDADES.Entidad AS dpaEntidad,
dbo.VENTALOTERIAS.FechaVentaLoterias AS dpaFecha,
SUM(dbo.VENTALOTERIAS.TotalTriples) + SUM
(dbo.VENTALOTERIAS.TotalTerminales) AS dpaVentas,
SUM(dbo.VENTALOTERIAS.BsComision) AS dpaComision,
SUM(dbo.VENTALOTERIAS.BsTerminal1) + SUM
(dbo.VENTALOTERIAS.BsTerminal2) + SUM
(dbo.VENTALOTERIAS.BsTerminal3)+ SUM
(dbo.VENTALOTERIAS.BsTriple1) + SUM
(dbo.VENTALOTERIAS.BsTriple2) + SUM
(dbo.VENTALOTERIAS.BsTriple3) AS dpaPremios,
SUM(dbo.VENTALOTERIAS.TotalTriples) + SUM
(dbo.VENTALOTERIAS.TotalTerminales) - SUM
(dbo.VENTALOTERIAS.BsComision)- SUM
(dbo.VENTALOTERIAS.BsTerminal1) - SUM
(dbo.VENTALOTERIAS.BsTerminal2) - SUM
(dbo.VENTALOTERIAS.BsTerminal3) - SUM
(dbo.VENTALOTERIAS.BsTriple1) - SUM
(dbo.VENTALOTERIAS.BsTriple2) - SUM
(dbo.VENTALOTERIAS.BsTriple3) AS dpaNeto,
SUM(dbo.VENTALOTERIAS.BsParticipacion) AS
dpaParticipacion,
SUM(dbo.VENTALOTERIAS.TotalTriples) + SUM
(dbo.VENTALOTERIAS.TotalTerminales)- SUM
(dbo.VENTALOTERIAS.BsComision) - SUM
(dbo.VENTALOTERIAS.BsTerminal1) - SUM
(dbo.VENTALOTERIAS.BsTerminal2)- SUM
(dbo.VENTALOTERIAS.BsTerminal3) - SUM
(dbo.VENTALOTERIAS.BsTriple1) - SUM
(dbo.VENTALOTERIAS.BsTriple2) - SUM
(dbo.VENTALOTERIAS.BsTriple3) - SUM
(dbo.VENTALOTERIAS.BsParticipacion) AS dpaSaldo,
CASE WHEN dpaSaldo>=0 THEN 'Gano' ELSE 'Perdio' END AS
dpaEstado
FROM dbo.VENTALOTERIAS INNER JOIN
dbo.ENTIDADES ON dbo.VENTALOTERIAS.EntidadID > dbo.ENTIDADES.EntidadID
GROUP BY dbo.VENTALOTERIAS.EntidadID,
dbo.ENTIDADES.Entidad,
dbo.VENTALOTERIAS.FechaVentaLoterias

Como pueden ver me da un error en el case y además he
tenido que reutilizar los mismos calculos para generar
campos que podrian ser calculados a traves de otros.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida