Filtrar Registros (para Alejandro Mesa)

10/06/2005 - 17:42 por swricardo | Informe spam
Hola Alejandro gracias por tu ayuda, disculpa que sea tan insistente pero
no se como puedo resolver esta consulta, te paso el codigo de mi tabla.

CREATE TABLE [dbo].[TDetalle_Documento] (
[Documento] [varchar] (10) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[NroRemesa] [int] NOT NULL ,
[NroRenglon] [int] NOT NULL ,
[Habilitado] [char] (1) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[IdForma] [varchar] (4) COLLATE Modern_Spanish_CI_AS NULL ,
[Asignado] [bit] NOT NULL ,
) ON [PRIMARY]
GO
Lo que necesito es agrupar los rangos de los documentos cuando 'habilitado
=H' y 'asignado = 0', necesito el primer y ultimo numero de cada rango
para evitar imprimir un listado tan largo.

mi idea es que quedara:
MINDOCUMENTO Y MAXDOCUMENTO

Gracias de nuevo, y espero haber sido mas claro. Ricardo

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
10/06/2005 - 18:00 | Informe spam
Ricardo,

Si posteas una pregunta o problema dirigida a un miembro especifico del
grupo, te privas de que otra solucion pueda ser posteada por otro miembro del
grupo.

Te pido por favor que postees data de ejemplo y el resultado esperado, no
quisiera que depues de dedicarle mas tiempo a la pregunta, la respuesta no se
adapte a tus necesidades reales.


AMB

"Ricardo" wrote:

Hola Alejandro gracias por tu ayuda, disculpa que sea tan insistente pero
no se como puedo resolver esta consulta, te paso el codigo de mi tabla.

CREATE TABLE [dbo].[TDetalle_Documento] (
[Documento] [varchar] (10) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[NroRemesa] [int] NOT NULL ,
[NroRenglon] [int] NOT NULL ,
[Habilitado] [char] (1) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[IdForma] [varchar] (4) COLLATE Modern_Spanish_CI_AS NULL ,
[Asignado] [bit] NOT NULL ,
) ON [PRIMARY]
GO
Lo que necesito es agrupar los rangos de los documentos cuando 'habilitado
=H' y 'asignado = 0', necesito el primer y ultimo numero de cada rango
para evitar imprimir un listado tan largo.

mi idea es que quedara:
MINDOCUMENTO Y MAXDOCUMENTO

Gracias de nuevo, y espero haber sido mas claro. Ricardo



Respuesta Responder a este mensaje
#2 Maxi
11/06/2005 - 16:02 | Informe spam
Hola, coincido con vos!! lo ideal seria que las preguntas vayan al foro y no
a una persona en particular, y ademas es interesante que nuestro amigo nos
pueda pasar algo mas de informacion para poder solucionar este query :-)


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Alejandro Mesa" escribió en el
mensaje news:
Ricardo,

Si posteas una pregunta o problema dirigida a un miembro especifico del
grupo, te privas de que otra solucion pueda ser posteada por otro miembro
del
grupo.

Te pido por favor que postees data de ejemplo y el resultado esperado, no
quisiera que depues de dedicarle mas tiempo a la pregunta, la respuesta no
se
adapte a tus necesidades reales.


AMB

"Ricardo" wrote:

Hola Alejandro gracias por tu ayuda, disculpa que sea tan insistente pero
no se como puedo resolver esta consulta, te paso el codigo de mi tabla.

CREATE TABLE [dbo].[TDetalle_Documento] (
[Documento] [varchar] (10) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[NroRemesa] [int] NOT NULL ,
[NroRenglon] [int] NOT NULL ,
[Habilitado] [char] (1) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[IdForma] [varchar] (4) COLLATE Modern_Spanish_CI_AS NULL ,
[Asignado] [bit] NOT NULL ,
) ON [PRIMARY]
GO
Lo que necesito es agrupar los rangos de los documentos cuando
'habilitado
=H' y 'asignado = 0', necesito el primer y ultimo numero de cada rango
para evitar imprimir un listado tan largo.

mi idea es que quedara:
MINDOCUMENTO Y MAXDOCUMENTO

Gracias de nuevo, y espero haber sido mas claro. Ricardo



Respuesta Responder a este mensaje
#3 swricardo
11/06/2005 - 20:59 | Informe spam
Hola a todos, de ahora en adelante no personalizare las preguntas

Les copio algunos valores de mi tabla y cual es el resultado esperado, se
que es muy complicado,pero no se como resolverla.
(Documento es un campo string(10))
Documento Habilitado Asignado
2600000001 H 0
2600000002 H 0
2600000003 H 0
2600000004 H 0
2600000005 H 0
2600000006 D 0
2600000007 D 0
2600000008 D 0
2600000009 D 0
2600000010 D 0
2600000011 D 0
2600000012 D 0
2600000013 D 0
2600000014 D 0
2600000015 D 0
2600000016 D 0
2600000017 D 0
2600000018 H 0
2600000019 H 0
2600000020 H 0
2600000021 H 0
2600000022 H 0
2600000023 H 0
2600000024 H 0
2600000025 D 0
2600000026 D 0
2600000027 D 0
2600000028 D 0
2600000029 D 0
2600000030 D 0
2600000031 D 0
2600000032 H 0
2600000033 H 0
2600000034 H 0
2600000035 H 0
2600000036 H 0
2600000037 H 0
2600000038 H 0
2600000039 H 0
2600000040 H 0
2600000041 H 0
2600000042 H 0
2600000043 H 0
2600000044 H 0
2600000045 H 0
2600000046 H 0
2600000047 H 0
2600000048 H 0
4010000001 H 1
4010000002 H 1
4010000003 H 1
4010000004 H 1
4010000005 H 1
4010000006 H 0
4010000007 H 0
4010000008 H 0
4010000009 H 0
4010000010 H 0
4010000011 H 0
4010000012 D 0
4010000013 D 0
4010000014 D 0
4010000015 D 0
4010000016 D 0
4010000017 H 0
4010000018 H 0
4010000019 H 0
4010000020 H 0
4010000021 H 0
4010000022 H 1
4010000023 H 1
4010000024 H 1
4010000025 H 1
4010000026 H 1
4010000027 H 1


Necesitaria agrupar por rangos, para evitar imprimir tantos registros, el
resultado seria algo asi: Rangos de Maximo y Minimo, cuando los habilitado
= H y asignado = 0

MinDoc MaxDoc Cantidad
2600000001 2600000005 5
2600000018 2600000024 5
2600000032 2600000048 15
4010000011 4010000021 9
4010000017 4010000021 5

Gracias por su ayuda, Ricardo

Maxi wrote:

Hola, coincido con vos!! lo ideal seria que las preguntas vayan al foro y no
a una persona en particular, y ademas es interesante que nuestro amigo nos
pueda pasar algo mas de informacion para poder solucionar este query :-)
Respuesta Responder a este mensaje
#4 Alejandro Mesa
13/06/2005 - 14:34 | Informe spam
Ricardo,

Ve si esta solucion es valida.

use northwind
go

create table t1 (
documento varchar(15) not null unique,
habilitado char(1) not null default('H') check(habilitado in ('H', 'D')),
asignado bit not null
)
go

insert into t1 values('2600000001', 'H', 0)
insert into t1 values('2600000002', 'H', 0)
insert into t1 values('2600000003', 'H', 0)
insert into t1 values('2600000004', 'H', 0)
insert into t1 values('2600000005', 'H', 0)
insert into t1 values('2600000006', 'D', 0)
insert into t1 values('2600000007', 'D', 0)
insert into t1 values('2600000008', 'D', 0)
insert into t1 values('2600000009', 'D', 0)
insert into t1 values('2600000010', 'D', 0)
insert into t1 values('2600000011', 'D', 0)
insert into t1 values('2600000012', 'D', 0)
insert into t1 values('2600000013', 'D', 0)
insert into t1 values('2600000014', 'D', 0)
insert into t1 values('2600000015', 'D', 0)
insert into t1 values('2600000016', 'D', 0)
insert into t1 values('2600000017', 'D', 0)
insert into t1 values('2600000018', 'H', 0)
insert into t1 values('2600000019', 'H', 0)
insert into t1 values('2600000020', 'H', 0)
insert into t1 values('2600000021', 'H', 0)
insert into t1 values('2600000022', 'H', 0)
insert into t1 values('2600000023', 'H', 0)
insert into t1 values('2600000024', 'H', 0)
insert into t1 values('2600000025', 'D', 0)
insert into t1 values('2600000026', 'D', 0)
insert into t1 values('2600000027', 'D', 0)
insert into t1 values('2600000028', 'D', 0)
insert into t1 values('2600000029', 'D', 0)
insert into t1 values('2600000030', 'D', 0)
insert into t1 values('2600000031', 'D', 0)
insert into t1 values('2600000032', 'H', 0)
insert into t1 values('2600000033', 'H', 0)
insert into t1 values('2600000034', 'H', 0)
insert into t1 values('2600000035', 'H', 0)
insert into t1 values('2600000036', 'H', 0)
insert into t1 values('2600000037', 'H', 0)
insert into t1 values('2600000038', 'H', 0)
insert into t1 values('2600000039', 'H', 0)
insert into t1 values('2600000040', 'H', 0)
insert into t1 values('2600000041', 'H', 0)
insert into t1 values('2600000042', 'H', 0)
insert into t1 values('2600000043', 'H', 0)
insert into t1 values('2600000044', 'H', 0)
insert into t1 values('2600000045', 'H', 0)
insert into t1 values('2600000046', 'H', 0)
insert into t1 values('2600000047', 'H', 0)
insert into t1 values('2600000048', 'H', 0)
insert into t1 values('4010000001', 'H', 1)
insert into t1 values('4010000002', 'H', 1)
insert into t1 values('4010000003', 'H', 1)
insert into t1 values('4010000004', 'H', 1)
insert into t1 values('4010000005', 'H', 1)
insert into t1 values('4010000006', 'H', 0)
insert into t1 values('4010000007', 'H', 0)
insert into t1 values('4010000008', 'H', 0)
insert into t1 values('4010000009', 'H', 0)
insert into t1 values('4010000010', 'H', 0)
insert into t1 values('4010000011', 'H', 0)
insert into t1 values('4010000012', 'D', 0)
insert into t1 values('4010000013', 'D', 0)
insert into t1 values('4010000014', 'D', 0)
insert into t1 values('4010000015', 'D', 0)
insert into t1 values('4010000016', 'D', 0)
insert into t1 values('4010000017', 'H', 0)
insert into t1 values('4010000018', 'H', 0)
insert into t1 values('4010000019', 'H', 0)
insert into t1 values('4010000020', 'H', 0)
insert into t1 values('4010000021', 'H', 0)
insert into t1 values('4010000022', 'H', 1)
insert into t1 values('4010000023', 'H', 1)
insert into t1 values('4010000024', 'H', 1)
insert into t1 values('4010000025', 'H', 1)
insert into t1 values('4010000026', 'H', 1)
insert into t1 values('4010000027', 'H', 1)
go

create view v1
as
select
a.documento,
isnull(
(
select
max(b.documento)
from
t1 as b
where
b.documento >= a.documento
and b.habilitado = 'H'
and b.asignado = 0
and not exists(
select
*
from
t1 as c
where
c.documento between a.documento and b.documento
and (
c.habilitado = 'D'
or asignado = 1
or (cast(c.documento as bigint) - cast((select max(d.documento) from t1
as d where d.documento >= a.documento and d.documento < c.documento) as
bigint)) > 1
)
)
), a.documento) as c2
from
t1 as a
where
habilitado = 'H'
and asignado = 0
go

select
min(documento) as documento,
c2,
(cast(c2 as bigint) - cast(min(documento) as bigint)) + 1 as cantidad
from
v1
group by
c2
order by
c2
go

drop view v1
go

drop table t1
go

No se porque el resultado incluye:

4010000011 4010000021 9

puesto que 4010000012 hasta 4010000016 tienen habilidato = 'D'.


AMB



"Ricardo" wrote:

Hola a todos, de ahora en adelante no personalizare las preguntas

Les copio algunos valores de mi tabla y cual es el resultado esperado, se
que es muy complicado,pero no se como resolverla.
(Documento es un campo string(10))
Documento Habilitado Asignado
2600000001 H 0
2600000002 H 0
2600000003 H 0
2600000004 H 0
2600000005 H 0
2600000006 D 0
2600000007 D 0
2600000008 D 0
2600000009 D 0
2600000010 D 0
2600000011 D 0
2600000012 D 0
2600000013 D 0
2600000014 D 0
2600000015 D 0
2600000016 D 0
2600000017 D 0
2600000018 H 0
2600000019 H 0
2600000020 H 0
2600000021 H 0
2600000022 H 0
2600000023 H 0
2600000024 H 0
2600000025 D 0
2600000026 D 0
2600000027 D 0
2600000028 D 0
2600000029 D 0
2600000030 D 0
2600000031 D 0
2600000032 H 0
2600000033 H 0
2600000034 H 0
2600000035 H 0
2600000036 H 0
2600000037 H 0
2600000038 H 0
2600000039 H 0
2600000040 H 0
2600000041 H 0
2600000042 H 0
2600000043 H 0
2600000044 H 0
2600000045 H 0
2600000046 H 0
2600000047 H 0
2600000048 H 0
4010000001 H 1
4010000002 H 1
4010000003 H 1
4010000004 H 1
4010000005 H 1
4010000006 H 0
4010000007 H 0
4010000008 H 0
4010000009 H 0
4010000010 H 0
4010000011 H 0
4010000012 D 0
4010000013 D 0
4010000014 D 0
4010000015 D 0
4010000016 D 0
4010000017 H 0
4010000018 H 0
4010000019 H 0
4010000020 H 0
4010000021 H 0
4010000022 H 1
4010000023 H 1
4010000024 H 1
4010000025 H 1
4010000026 H 1
4010000027 H 1


Necesitaria agrupar por rangos, para evitar imprimir tantos registros, el
resultado seria algo asi: Rangos de Maximo y Minimo, cuando los habilitado
= H y asignado = 0

MinDoc MaxDoc Cantidad
2600000001 2600000005 5
2600000018 2600000024 5
2600000032 2600000048 15
4010000011 4010000021 9
4010000017 4010000021 5

Gracias por su ayuda, Ricardo

Maxi wrote:

> Hola, coincido con vos!! lo ideal seria que las preguntas vayan al foro y no
> a una persona en particular, y ademas es interesante que nuestro amigo nos
> pueda pasar algo mas de informacion para poder solucionar este query :-)




Respuesta Responder a este mensaje
#5 swricardo
13/06/2005 - 16:28 | Informe spam
Gracias, Alejandro, ahora lo pruebo, necesitaba solucionar este tema para
un trabajo de la facultad.

Saludos y gracias de nuevo,

Ricardo


Alejandro Mesa wrote:

Ricardo,

Ve si esta solucion es valida.

use northwind
go

create table t1 (
documento varchar(15) not null unique,
habilitado char(1) not null default('H') check(habilitado in ('H', 'D')),
asignado bit not null
)
go

insert into t1 values('2600000001', 'H', 0)
insert into t1 values('2600000002', 'H', 0)
insert into t1 values('2600000003', 'H', 0)
insert into t1 values('2600000004', 'H', 0)
insert into t1 values('2600000005', 'H', 0)
insert into t1 values('2600000006', 'D', 0)
insert into t1 values('2600000007', 'D', 0)
insert into t1 values('2600000008', 'D', 0)
insert into t1 values('2600000009', 'D', 0)
insert into t1 values('2600000010', 'D', 0)
insert into t1 values('2600000011', 'D', 0)
insert into t1 values('2600000012', 'D', 0)
insert into t1 values('2600000013', 'D', 0)
insert into t1 values('2600000014', 'D', 0)
insert into t1 values('2600000015', 'D', 0)
insert into t1 values('2600000016', 'D', 0)
insert into t1 values('2600000017', 'D', 0)
insert into t1 values('2600000018', 'H', 0)
insert into t1 values('2600000019', 'H', 0)
insert into t1 values('2600000020', 'H', 0)
insert into t1 values('2600000021', 'H', 0)
insert into t1 values('2600000022', 'H', 0)
insert into t1 values('2600000023', 'H', 0)
insert into t1 values('2600000024', 'H', 0)
insert into t1 values('2600000025', 'D', 0)
insert into t1 values('2600000026', 'D', 0)
insert into t1 values('2600000027', 'D', 0)
insert into t1 values('2600000028', 'D', 0)
insert into t1 values('2600000029', 'D', 0)
insert into t1 values('2600000030', 'D', 0)
insert into t1 values('2600000031', 'D', 0)
insert into t1 values('2600000032', 'H', 0)
insert into t1 values('2600000033', 'H', 0)
insert into t1 values('2600000034', 'H', 0)
insert into t1 values('2600000035', 'H', 0)
insert into t1 values('2600000036', 'H', 0)
insert into t1 values('2600000037', 'H', 0)
insert into t1 values('2600000038', 'H', 0)
insert into t1 values('2600000039', 'H', 0)
insert into t1 values('2600000040', 'H', 0)
insert into t1 values('2600000041', 'H', 0)
insert into t1 values('2600000042', 'H', 0)
insert into t1 values('2600000043', 'H', 0)
insert into t1 values('2600000044', 'H', 0)
insert into t1 values('2600000045', 'H', 0)
insert into t1 values('2600000046', 'H', 0)
insert into t1 values('2600000047', 'H', 0)
insert into t1 values('2600000048', 'H', 0)
insert into t1 values('4010000001', 'H', 1)
insert into t1 values('4010000002', 'H', 1)
insert into t1 values('4010000003', 'H', 1)
insert into t1 values('4010000004', 'H', 1)
insert into t1 values('4010000005', 'H', 1)
insert into t1 values('4010000006', 'H', 0)
insert into t1 values('4010000007', 'H', 0)
insert into t1 values('4010000008', 'H', 0)
insert into t1 values('4010000009', 'H', 0)
insert into t1 values('4010000010', 'H', 0)
insert into t1 values('4010000011', 'H', 0)
insert into t1 values('4010000012', 'D', 0)
insert into t1 values('4010000013', 'D', 0)
insert into t1 values('4010000014', 'D', 0)
insert into t1 values('4010000015', 'D', 0)
insert into t1 values('4010000016', 'D', 0)
insert into t1 values('4010000017', 'H', 0)
insert into t1 values('4010000018', 'H', 0)
insert into t1 values('4010000019', 'H', 0)
insert into t1 values('4010000020', 'H', 0)
insert into t1 values('4010000021', 'H', 0)
insert into t1 values('4010000022', 'H', 1)
insert into t1 values('4010000023', 'H', 1)
insert into t1 values('4010000024', 'H', 1)
insert into t1 values('4010000025', 'H', 1)
insert into t1 values('4010000026', 'H', 1)
insert into t1 values('4010000027', 'H', 1)
go

create view v1
as
select
a.documento,
isnull(
(
select
max(b.documento)
from
t1 as b
where
b.documento >= a.documento
and b.habilitado = 'H'
and b.asignado = 0
and not exists(
select
*
from
t1 as c
where
c.documento between a.documento and b.documento
and (
c.habilitado = 'D'
or asignado = 1
or (cast(c.documento as bigint) - cast((select max(d.documento) from t1
as d where d.documento >= a.documento and d.documento < c.documento) as
bigint)) > 1
)
)
), a.documento) as c2
from
t1 as a
where
habilitado = 'H'
and asignado = 0
go

select
min(documento) as documento,
c2,
(cast(c2 as bigint) - cast(min(documento) as bigint)) + 1 as cantidad
from
v1
group by
c2
order by
c2
go

drop view v1
go

drop table t1
go

No se porque el resultado incluye:

4010000011 4010000021 9

puesto que 4010000012 hasta 4010000016 tienen habilidato = 'D'.


AMB



"Ricardo" wrote:

> Hola a todos, de ahora en adelante no personalizare las preguntas
>
> Les copio algunos valores de mi tabla y cual es el resultado esperado, se
> que es muy complicado,pero no se como resolverla.
> (Documento es un campo string(10))
> Documento Habilitado Asignado
> 2600000001 H 0
> 2600000002 H 0
> 2600000003 H 0
> 2600000004 H 0
> 2600000005 H 0
> 2600000006 D 0
> 2600000007 D 0
> 2600000008 D 0
> 2600000009 D 0
> 2600000010 D 0
> 2600000011 D 0
> 2600000012 D 0
> 2600000013 D 0
> 2600000014 D 0
> 2600000015 D 0
> 2600000016 D 0
> 2600000017 D 0
> 2600000018 H 0
> 2600000019 H 0
> 2600000020 H 0
> 2600000021 H 0
> 2600000022 H 0
> 2600000023 H 0
> 2600000024 H 0
> 2600000025 D 0
> 2600000026 D 0
> 2600000027 D 0
> 2600000028 D 0
> 2600000029 D 0
> 2600000030 D 0
> 2600000031 D 0
> 2600000032 H 0
> 2600000033 H 0
> 2600000034 H 0
> 2600000035 H 0
> 2600000036 H 0
> 2600000037 H 0
> 2600000038 H 0
> 2600000039 H 0
> 2600000040 H 0
> 2600000041 H 0
> 2600000042 H 0
> 2600000043 H 0
> 2600000044 H 0
> 2600000045 H 0
> 2600000046 H 0
> 2600000047 H 0
> 2600000048 H 0
> 4010000001 H 1
> 4010000002 H 1
> 4010000003 H 1
> 4010000004 H 1
> 4010000005 H 1
> 4010000006 H 0
> 4010000007 H 0
> 4010000008 H 0
> 4010000009 H 0
> 4010000010 H 0
> 4010000011 H 0
> 4010000012 D 0
> 4010000013 D 0
> 4010000014 D 0
> 4010000015 D 0
> 4010000016 D 0
> 4010000017 H 0
> 4010000018 H 0
> 4010000019 H 0
> 4010000020 H 0
> 4010000021 H 0
> 4010000022 H 1
> 4010000023 H 1
> 4010000024 H 1
> 4010000025 H 1
> 4010000026 H 1
> 4010000027 H 1
>
>
> Necesitaria agrupar por rangos, para evitar imprimir tantos registros, el
> resultado seria algo asi: Rangos de Maximo y Minimo, cuando los habilitado
> = H y asignado = 0
>
> MinDoc MaxDoc Cantidad
> 2600000001 2600000005 5
> 2600000018 2600000024 5
> 2600000032 2600000048 15
> 4010000011 4010000021 9
> 4010000017 4010000021 5
>
> Gracias por su ayuda, Ricardo
>
> Maxi wrote:
>
> > Hola, coincido con vos!! lo ideal seria que las preguntas vayan al foro


y no
> > a una persona en particular, y ademas es interesante que nuestro amigo


nos
> > pueda pasar algo mas de informacion para poder solucionar este query :-)
>
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida