SQL Server - Seleccion datos

 
Vista:
sin imagen de perfil

Seleccion datos

Publicado por Guillermo (3 intervenciones) el 25/10/2016 20:24:22
Buenos días,
Estoy trabajando con una base de datos donde a los usuarios se les asigna diferentes acciones, ahorita estoy trabajando en un select donde se me deben listar todos los empleados sin importar las acciones que se le asignen pero en el campo de accion de personal me debe aparecer '001' o '002' si esas acciones fueron aplicadas para los usuarios en el caso de que un usuario tenga otra accion se debe poner null. Esta parte ya la tengo en mi select el problema que tengo actualmente es que si un empleado tiene una accion '001' y otra accion null, en el select me salen los 2 registros cuando ocupo que nada más se me muestre el '001' y el null no se me muestre. Con el Distict resolvi que si habian N cantidad de null solo me muestre 1 null por cada periodo, pero no me resuelve el tema antes especificado. Aca les dejo un ejemplo más grafico para mayor facilidad.

Capture
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Seleccion datos

Publicado por Isaias (4557 intervenciones) el 25/10/2016 23:43:04
Agruegue en su filtro WHERE Accion IS NOT NULL
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Seleccion datos

Publicado por Guillermo (3 intervenciones) el 26/10/2016 19:51:44
De esa manera no me saldrian los datos en los que Accion sea Null y en mi caso si ocupo que esos datos se muestren. Lo que necesito es que tengan prioridad en mostrarse las otras acciones, en el caso que en un mismo registro tenga una accion en null y otra accion en 001
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Seleccion datos

Publicado por Isaias (4557 intervenciones) el 26/10/2016 22:56:44
Veamos si esto te funciona

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
create table #test (Empleado char(3), Periodo char(4), Accion char(3))
insert into #test values ('101','2016','001')
,('102','2016','001')
,('102','2016',null)
,('103','2016','002')
,('104','2016',null)
 
select * from
(
select a.Empleado,
	a.Periodo,
	isnull(a.Accion,'001') as Accion,
	ROW_NUMBER () OVER (PARTITION BY a.Empleado,
	a.Periodo,
	isnull(a.Accion,'001')
	ORDER BY a.Empleado,
	a.Periodo ASC) AS RN
from #test a
) t1 where rn <=1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Seleccion datos

Publicado por Guillermo (3 intervenciones) el 27/10/2016 18:48:32
Excelente Isais, con esto me soluciona el problema, Gracias.
Solamente me queda una duda al respecto, en el caso que desee aplicar lo mismo para 001 y 002, podria utilizar el mismo meto o debo realizar otro completamente diferente?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Seleccion datos

Publicado por Isaias (4557 intervenciones) el 27/10/2016 23:06:25
Bueno, yo lo probe hasta el 2016 y funciona

1
2
3
4
5
6
7
8
insert into #test values ('101','2016','001')
,('102','2016','001')
,('102','2016',null)
,('103','2016','002')
,('104','2016',null)
,('105','2016','001')
,('105','2016',null)
,('106','2016',null)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Seleccion datos

Publicado por juan (3 intervenciones) el 01/11/2016 14:44:41
Te mando la cadena si te sirve
Select * From (Nombre de la Tabla).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar