Consulta compleja

30/11/2009 - 17:51 por José Antonio Muñoz | Informe spam
Hola a todos,

¿como puedo diseñar una consulta (SELECT) de una tabla que ejecute a su vez
por cada registro una subconsulta que es a su vez el contenido de uno de los
campos de la tabla? No se si me he explicado bien pero con un ejemplo yo
creo que estará claro:

SELECT
Codigo,
Descripcion,
(SELECT Count(*) FROM (xx) As Sql) As Contador
FROM
Tabla

donde xx es una consulta SELECT ..., que se encuentra archivada como texto
en un campo de la tabla.

saludos,
José Antonio Muñoz

Preguntas similare

Leer las respuestas

#6 José Antonio Muñoz
01/12/2009 - 09:06 | Informe spam
En primer lugar necesito ejecutar cada consulta pero solo para saber cuantos
registros me devuelve, es decir, SELECT Count(*) FROM (consultatexto) y
también el porcentaje con respecto al total de registros de cada tabla
consultada para todos los controles de calidad. En segundo lugar cada una de
las consultas solo se ejecutarán a través de un proceso de actualización
automático UPDATE tabla <consulta select almacenada> solo para los controles
de calidad que el usuario haya elegido.

Por tanto existen dos procesos:

a) Elegir que controles de calidad superan un baremo establecido a través de
estas consultas almacenadas.
b) Ejecutar actualizaciones automáticas con UPDATE ...para los controles de
calidad (consultas SELECT almacenadas como texto) que han superado ese
baremo.

saludos,
José Antonio Muñoz


"Juan Carlos Leguizamon" escribió en el
mensaje de noticias news:%
Esas "consultas SELECT que se encuentran archivadas como texto en un campo
de la tabla" cuales son, nos podrias dar algunos ejemplos? creo que se
necesita un cambio de filosofia ...

"José Antonio Muñoz" escribió en el mensaje
news:
Hola a todos,

¿como puedo diseñar una consulta (SELECT) de una tabla que ejecute a su
vez por cada registro una subconsulta que es a su vez el contenido de uno
de los campos de la tabla? No se si me he explicado bien pero con un
ejemplo yo creo que estará claro:

SELECT
Codigo,
Descripcion,
(SELECT Count(*) FROM (xx) As Sql) As Contador
FROM
Tabla

donde xx es una consulta SELECT ..., que se encuentra archivada como
texto en un campo de la tabla.

saludos,
José Antonio Muñoz





Respuesta Responder a este mensaje
#7 Juan Carlos Leguizamon
01/12/2009 - 18:35 | Informe spam
Las consultas (de Select y Update) son creadas por un programador? O existe
una aplicacion que es capaz de traducir las necesidades del usuario en una
consulta y por eso es que se almacena en una tabla...
Si es un programador, esa persona que crea las consultas puede tener acceso
a modificar una funcion de tabla de la base de datos?


"José Antonio Muñoz" escribió en el mensaje
news:
En primer lugar necesito ejecutar cada consulta pero solo para saber
cuantos registros me devuelve, es decir, SELECT Count(*) FROM
(consultatexto) y también el porcentaje con respecto al total de registros
de cada tabla consultada para todos los controles de calidad. En segundo
lugar cada una de las consultas solo se ejecutarán a través de un proceso
de actualización automático UPDATE tabla <consulta select almacenada> solo
para los controles de calidad que el usuario haya elegido.

Por tanto existen dos procesos:

a) Elegir que controles de calidad superan un baremo establecido a través
de estas consultas almacenadas.
b) Ejecutar actualizaciones automáticas con UPDATE ...para los controles
de calidad (consultas SELECT almacenadas como texto) que han superado ese
baremo.

saludos,
José Antonio Muñoz


"Juan Carlos Leguizamon" escribió en el
mensaje de noticias news:%
Esas "consultas SELECT que se encuentran archivadas como texto en un
campo de la tabla" cuales son, nos podrias dar algunos ejemplos? creo que
se necesita un cambio de filosofia ...

"José Antonio Muñoz" escribió en el mensaje
news:
Hola a todos,

¿como puedo diseñar una consulta (SELECT) de una tabla que ejecute a su
vez por cada registro una subconsulta que es a su vez el contenido de
uno de los campos de la tabla? No se si me he explicado bien pero con un
ejemplo yo creo que estará claro:

SELECT
Codigo,
Descripcion,
(SELECT Count(*) FROM (xx) As Sql) As Contador
FROM
Tabla

donde xx es una consulta SELECT ..., que se encuentra archivada como
texto en un campo de la tabla.

saludos,
José Antonio Muñoz








Respuesta Responder a este mensaje
#8 José Antonio Muñoz
02/12/2009 - 08:38 | Informe spam
Si, son creadas por un programador, y el mismo programador puede tener
acceso a todo en la base de datos incluido la creación y modificación de
funciones de tabla.

José Antonio Muñoz.

"Juan Carlos Leguizamon" escribió en el
mensaje de noticias news:

Las consultas (de Select y Update) son creadas por un programador? O
existe una aplicacion que es capaz de traducir las necesidades del usuario
en una consulta y por eso es que se almacena en una tabla...
Si es un programador, esa persona que crea las consultas puede tener
acceso a modificar una funcion de tabla de la base de datos?


"José Antonio Muñoz" escribió en el mensaje
news:
En primer lugar necesito ejecutar cada consulta pero solo para saber
cuantos registros me devuelve, es decir, SELECT Count(*) FROM
(consultatexto) y también el porcentaje con respecto al total de
registros de cada tabla consultada para todos los controles de calidad.
En segundo lugar cada una de las consultas solo se ejecutarán a través de
un proceso de actualización automático UPDATE tabla <consulta select
almacenada> solo para los controles de calidad que el usuario haya
elegido.

Por tanto existen dos procesos:

a) Elegir que controles de calidad superan un baremo establecido a través
de estas consultas almacenadas.
b) Ejecutar actualizaciones automáticas con UPDATE ...para los controles
de calidad (consultas SELECT almacenadas como texto) que han superado ese
baremo.

saludos,
José Antonio Muñoz


"Juan Carlos Leguizamon" escribió en el
mensaje de noticias news:%
Esas "consultas SELECT que se encuentran archivadas como texto en un
campo de la tabla" cuales son, nos podrias dar algunos ejemplos? creo
que se necesita un cambio de filosofia ...

"José Antonio Muñoz" escribió en el mensaje
news:
Hola a todos,

¿como puedo diseñar una consulta (SELECT) de una tabla que ejecute a su
vez por cada registro una subconsulta que es a su vez el contenido de
uno de los campos de la tabla? No se si me he explicado bien pero con
un ejemplo yo creo que estará claro:

SELECT
Codigo,
Descripcion,
(SELECT Count(*) FROM (xx) As Sql) As Contador
FROM
Tabla

donde xx es una consulta SELECT ..., que se encuentra archivada como
texto en un campo de la tabla.

saludos,
José Antonio Muñoz












Respuesta Responder a este mensaje
#9 Juan Carlos Leguizamon
02/12/2009 - 14:38 | Informe spam
Ok, la pregunta era porque mi solucion seria algo como esto: (si es que
entendi bien).
Yo no pondria las consultas para conteos como texto de una tabla, sino que
utilizaria una funciona de tabla que contenga la logica para cada caso (en
este caso la llame fntbSelect).
similarmente no tendria una consulta almacenada para el update sino que se
me ocurren dos soluciones: 1. tener un procedimiento general que reciba como
parametros algun indicador de cual o cuales controles quiere ejecutar o 2.
tener un procedimiento por cada control y en la tabla principal almacenar su
nombre, que seria ejecutado desde la misma aplicacion donde el usuario elige
los controles de calidad que superaron el "baremo" (por cierto tuve que
buscar en google que era eso :D) (eso segunda opcion requeriria un que yo
llame soUpdate en la tabla principal -que inclui en el ejemplo-)

create table xxPrincipal (Codigo tinyint, Descripcion varchar(100), spUpdate
varchar(100))
create table xxVisitas (Codigo tinyint, Nombre varchar(100), FechaVisita
datetime)
create table xxSalidas (Codigo tinyint, Nombre varchar(100), Salida tinyint)
go
insert into xxPrincipal (Codigo, Descripcion, spUpdate) values (1, 'Control
de tabla Visitas', 'spupdVisitas')
insert into xxPrincipal (Codigo, Descripcion, spUpdate) values (2, 'Control
de tabla Salidas', 'spupdSalidas')
go
insert into xxVisitas (Codigo, Nombre, FechaVisita) values (1, 'Prueba1',
null)
insert into xxVisitas (Codigo, Nombre, FechaVisita) values (2, 'Prueba2',
null)
insert into xxVisitas (Codigo, Nombre, FechaVisita) values (3, 'Prueba3',
'20091201')
go
insert into xxSalidas (Codigo, Nombre, Salida) values (1, 'Buena1', 0)
insert into xxSalidas (Codigo, Nombre, Salida) values (2, 'Buena2', 0)
insert into xxSalidas (Codigo, Nombre, Salida) values (3, 'Mala1', 1)
insert into xxSalidas (Codigo, Nombre, Salida) values (4, 'Mala2', 1)
Go

Registros
CREATE FUNCTION dbo.fntbSelect()
RETURNS TABLE
AS
RETURN
(
SELECT
1 AS CodigoControl,
(SELECT COUNT(*) FROM xxVisitas) AS RegistrosTotales,
COUNT(*) As Invalidos,
Case When (SELECT COUNT(*) FROM xxVisitas) = 0 Then 0 Else Cast(COUNT(*)
As decimal(8,2)) / (SELECT COUNT(*) FROM xxVisitas) End * 100 As Porcentaje
FROM xxVisitas
WHERE FechaVisita IS NULL

UNION

SELECT
2 AS CodigoControl,
(SELECT COUNT(*) FROM xxSalidas) AS RegistrosTotales,
COUNT(*) As Invalidos,
Case When (SELECT COUNT(*) FROM xxSalidas) = 0 Then 0 Else Cast(COUNT(*)
As decimal(8,2)) / (SELECT COUNT(*) FROM xxSalidas) End * 100 As Porcentaje
FROM xxSalidas
WHERE Salida = 1
)
GO

**************************************************************************
**************************************************************************
SELECT a.Codigo, a.Descripcion, b.RegistrosTotales, b.Invalidos,
b.Porcentaje, a.spUpdate
FROM xxPrincipal a
INNER JOIN dbo.fntbSelect() b ON a.Codigo = b.CodigoControl


/*
drop function dbo.fntbSelect
drop table xxPrincipal
drop table xxVisitas
drop table xxSalidas
*/






"José Antonio Muñoz" escribió en el mensaje
news:
Si, son creadas por un programador, y el mismo programador puede tener
acceso a todo en la base de datos incluido la creación y modificación de
funciones de tabla.

José Antonio Muñoz.

"Juan Carlos Leguizamon" escribió en el
mensaje de noticias news:

Las consultas (de Select y Update) son creadas por un programador? O
existe una aplicacion que es capaz de traducir las necesidades del
usuario en una consulta y por eso es que se almacena en una tabla...
Si es un programador, esa persona que crea las consultas puede tener
acceso a modificar una funcion de tabla de la base de datos?


"José Antonio Muñoz" escribió en el mensaje
news:
En primer lugar necesito ejecutar cada consulta pero solo para saber
cuantos registros me devuelve, es decir, SELECT Count(*) FROM
(consultatexto) y también el porcentaje con respecto al total de
registros de cada tabla consultada para todos los controles de calidad.
En segundo lugar cada una de las consultas solo se ejecutarán a través
de un proceso de actualización automático UPDATE tabla <consulta select
almacenada> solo para los controles de calidad que el usuario haya
elegido.

Por tanto existen dos procesos:

a) Elegir que controles de calidad superan un baremo establecido a
través de estas consultas almacenadas.
b) Ejecutar actualizaciones automáticas con UPDATE ...para los controles
de calidad (consultas SELECT almacenadas como texto) que han superado
ese baremo.

saludos,
José Antonio Muñoz


"Juan Carlos Leguizamon" escribió en el
mensaje de noticias news:%
Esas "consultas SELECT que se encuentran archivadas como texto en un
campo de la tabla" cuales son, nos podrias dar algunos ejemplos? creo
que se necesita un cambio de filosofia ...

"José Antonio Muñoz" escribió en el mensaje
news:
Hola a todos,

¿como puedo diseñar una consulta (SELECT) de una tabla que ejecute a
su vez por cada registro una subconsulta que es a su vez el contenido
de uno de los campos de la tabla? No se si me he explicado bien pero
con un ejemplo yo creo que estará claro:

SELECT
Codigo,
Descripcion,
(SELECT Count(*) FROM (xx) As Sql) As Contador
FROM
Tabla

donde xx es una consulta SELECT ..., que se encuentra archivada como
texto en un campo de la tabla.

saludos,
José Antonio Muñoz















Respuesta Responder a este mensaje
#10 José Antonio Muñoz
03/12/2009 - 09:01 | Informe spam
Gracias por tu respuesta, la solución parece ser interesante, la probaré,

saludos,
José Antonio Muñoz.

"Juan Carlos Leguizamon" escribió en el
mensaje de noticias news:

Ok, la pregunta era porque mi solucion seria algo como esto: (si es que
entendi bien).
Yo no pondria las consultas para conteos como texto de una tabla, sino que
utilizaria una funciona de tabla que contenga la logica para cada caso (en
este caso la llame fntbSelect).
similarmente no tendria una consulta almacenada para el update sino que se
me ocurren dos soluciones: 1. tener un procedimiento general que reciba
como parametros algun indicador de cual o cuales controles quiere ejecutar
o 2. tener un procedimiento por cada control y en la tabla principal
almacenar su nombre, que seria ejecutado desde la misma aplicacion donde
el usuario elige los controles de calidad que superaron el "baremo" (por
cierto tuve que buscar en google que era eso :D) (eso segunda opcion
requeriria un que yo llame soUpdate en la tabla principal -que inclui en
el ejemplo-)

create table xxPrincipal (Codigo tinyint, Descripcion varchar(100),
spUpdate varchar(100))
create table xxVisitas (Codigo tinyint, Nombre varchar(100), FechaVisita
datetime)
create table xxSalidas (Codigo tinyint, Nombre varchar(100), Salida
tinyint)
go
insert into xxPrincipal (Codigo, Descripcion, spUpdate) values (1,
'Control de tabla Visitas', 'spupdVisitas')
insert into xxPrincipal (Codigo, Descripcion, spUpdate) values (2,
'Control de tabla Salidas', 'spupdSalidas')
go
insert into xxVisitas (Codigo, Nombre, FechaVisita) values (1, 'Prueba1',
null)
insert into xxVisitas (Codigo, Nombre, FechaVisita) values (2, 'Prueba2',
null)
insert into xxVisitas (Codigo, Nombre, FechaVisita) values (3, 'Prueba3',
'20091201')
go
insert into xxSalidas (Codigo, Nombre, Salida) values (1, 'Buena1', 0)
insert into xxSalidas (Codigo, Nombre, Salida) values (2, 'Buena2', 0)
insert into xxSalidas (Codigo, Nombre, Salida) values (3, 'Mala1', 1)
insert into xxSalidas (Codigo, Nombre, Salida) values (4, 'Mala2', 1)
Go

Registros
CREATE FUNCTION dbo.fntbSelect()
RETURNS TABLE
AS
RETURN
(
SELECT
1 AS CodigoControl,
(SELECT COUNT(*) FROM xxVisitas) AS RegistrosTotales,
COUNT(*) As Invalidos,
Case When (SELECT COUNT(*) FROM xxVisitas) = 0 Then 0 Else Cast(COUNT(*)
As decimal(8,2)) / (SELECT COUNT(*) FROM xxVisitas) End * 100 As
Porcentaje
FROM xxVisitas
WHERE FechaVisita IS NULL

UNION

SELECT
2 AS CodigoControl,
(SELECT COUNT(*) FROM xxSalidas) AS RegistrosTotales,
COUNT(*) As Invalidos,
Case When (SELECT COUNT(*) FROM xxSalidas) = 0 Then 0 Else Cast(COUNT(*)
As decimal(8,2)) / (SELECT COUNT(*) FROM xxSalidas) End * 100 As
Porcentaje
FROM xxSalidas
WHERE Salida = 1
)
GO

**************************************************************************
Original)
**************************************************************************
SELECT a.Codigo, a.Descripcion, b.RegistrosTotales, b.Invalidos,
b.Porcentaje, a.spUpdate
FROM xxPrincipal a
INNER JOIN dbo.fntbSelect() b ON a.Codigo = b.CodigoControl


/*
drop function dbo.fntbSelect
drop table xxPrincipal
drop table xxVisitas
drop table xxSalidas
*/






"José Antonio Muñoz" escribió en el mensaje
news:
Si, son creadas por un programador, y el mismo programador puede tener
acceso a todo en la base de datos incluido la creación y modificación de
funciones de tabla.

José Antonio Muñoz.

"Juan Carlos Leguizamon" escribió en el
mensaje de noticias news:

Las consultas (de Select y Update) son creadas por un programador? O
existe una aplicacion que es capaz de traducir las necesidades del
usuario en una consulta y por eso es que se almacena en una tabla...
Si es un programador, esa persona que crea las consultas puede tener
acceso a modificar una funcion de tabla de la base de datos?


"José Antonio Muñoz" escribió en el mensaje
news:
En primer lugar necesito ejecutar cada consulta pero solo para saber
cuantos registros me devuelve, es decir, SELECT Count(*) FROM
(consultatexto) y también el porcentaje con respecto al total de
registros de cada tabla consultada para todos los controles de calidad.
En segundo lugar cada una de las consultas solo se ejecutarán a través
de un proceso de actualización automático UPDATE tabla <consulta select
almacenada> solo para los controles de calidad que el usuario haya
elegido.

Por tanto existen dos procesos:

a) Elegir que controles de calidad superan un baremo establecido a
través de estas consultas almacenadas.
b) Ejecutar actualizaciones automáticas con UPDATE ...para los
controles de calidad (consultas SELECT almacenadas como texto) que han
superado ese baremo.

saludos,
José Antonio Muñoz


"Juan Carlos Leguizamon" escribió en
el mensaje de noticias news:%
Esas "consultas SELECT que se encuentran archivadas como texto en un
campo de la tabla" cuales son, nos podrias dar algunos ejemplos? creo
que se necesita un cambio de filosofia ...

"José Antonio Muñoz" escribió en el
mensaje news:
Hola a todos,

¿como puedo diseñar una consulta (SELECT) de una tabla que ejecute a
su vez por cada registro una subconsulta que es a su vez el contenido
de uno de los campos de la tabla? No se si me he explicado bien pero
con un ejemplo yo creo que estará claro:

SELECT
Codigo,
Descripcion,
(SELECT Count(*) FROM (xx) As Sql) As Contador
FROM
Tabla

donde xx es una consulta SELECT ..., que se encuentra archivada como
texto en un campo de la tabla.

saludos,
José Antonio Muñoz



















email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida