SQL Server - Consulta combinada para un campo SQL

 
Vista:
sin imagen de perfil

Consulta combinada para un campo SQL

Publicado por Carlos (12 intervenciones) el 24/04/2018 15:59:42
Tengo una tabla que contiene el campo Tipo VARCHAR(10) con los siguientes registros:
ID-------Tipo
1----------A
2----------B
3----------A - B
4----------A - C
5----------C
6----------B - C
7----------NULL

Tendré 3 checkbox: cbA cbB cbC La consulta que he realizado funciona a la perfección:
- Si selecciono el cbA, muestra los ID 1,3 y 4
- Si selecciono el cbB, muestra los ID 2,3 y 6
- Si selecciono el cbC, muestra los ID 4,5 y 6

Pero ahora quiero hacer una búsqueda de filtros combinados para el campo Tipo, que contenga las letras que deseo en ese campo, es decir:
- Si selecciono cbA y cbB, que muestre los IDs 1,2,3,4 y 6
- Si selecciono cbA y cbC, que muestre los IDs 1,3,4,5 y 6
- Si selecciono cbC y cbB, que muestre los IDs 2,3,4,5 y 6
- Si selecciono cbA, cbB y cbC, que muestre todos los IDs menos el ID 7

Y si no selecciono ninguno checkbox, que me muestre todos los registros, ya que habrán registros con dicho campo nulo.

Hay alguna forma de hacerlo? Con “Like in” o utilizando algún otro método?
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
sin imagen de perfil
Val: 86
Ha disminuido su posición en 2 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta combinada para un campo SQL

Publicado por Rafael (110 intervenciones) el 24/04/2018 16:10:30
Hola...

Perdon por la expresion... pero creo que no has pensado lo suficiente en la solucion... a ver si esto te ayuda...

Buscas un dato que sea como (LIKE) A Y (te suena el AND de algun lado) que sea como (LIKE) B... verdad???
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

Consulta combinada para un campo SQL

Publicado por Carlos (12 intervenciones) el 24/04/2018 16:16:44
Si el dato es 'A - B', que SI muestre ese registro al seleccionar cbA.
Si el dato es 'A - B', que SI muestre ese registro al seleccionar cbB.
Si el dato es 'A - B', que NO muestre ese registro al seleccionar cbC

Si el dato es 'A - B', que SI muestre ese registro al seleccionar cbA y cbB
Si el dato es 'A - B', que SI muestre ese registro al seleccionar cbA y cbC
Si el dato es 'A - B', que SI muestre ese registro al seleccionar cbB y cbC

Si el dato es 'A - B', que SI muestre ese registro al seleccionar cbA,cbB y cbC
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
Val: 67
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta combinada para un campo SQL

Publicado por Ana (34 intervenciones) el 24/04/2018 16:39:50
Hola Carlos,

¿Podrías poner el script que realiza esas búsquedas? Principalmente el WHERE.

Un saludo
Ana
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

Consulta combinada para un campo SQL

Publicado por Carlos (12 intervenciones) el 24/04/2018 18:27:06
Pues despues de romperme la cabeza aqui tengo la solución.

TABLA

ID------TIPO------VALOR
1-------A-------------1
2-------B-------------1
3-------A - B--------1
4-------A - C--------1
5-------C-------------1
6-------B - C--------1
7-------NULL--------1
8-------NULL--------1


QUERY

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
DECLARE @Sql VARCHAR(MAX)
 
DECLARE @cb1 VARCHAR(1)
DECLARE @cb2 VARCHAR(1)
DECLARE @cb3 VARCHAR(1)
 
DECLARE @CondA VARCHAR(MAX)
DECLARE @CondB VARCHAR(MAX)
DECLARE @CondC VARCHAR(MAX)
 
IF @cb1 = ''
	SET @CondA = ''
ELSE
	SET @CondA = ' Tipo LIKE ''%''+'''+ISNULL(@cb1,'')+'''+''%'' '
 
IF @cb2 = ''
	SET @CondB = ''
ELSE
	SET @CondB = ' Tipo ''%''+'''+ISNULL(@cb2,'')+'''+''%'' '
 
IF @cb3 = ''
	SET @CondC = ''
ELSE
	SET @CondC = ' Tipo ''%''+'''+ISNULL(@cb3,'')+'''+''%'' '
 
 
SET @Sql='
	SELECT * FROM Tabla T
	WHERE ' +
	(CASE WHEN @CondA!='' OR @CondB!='' OR @CondC!='' THEN '(' ELSE '' END) +
	+ @CondA +
	(CASE WHEN @CondA!='' THEN (CASE WHEN @CondB!='' OR @CondC!='' THEN 'OR' ELSE '' END) ELSE '' END)
	+ @CondB +
	(CASE WHEN @CondB!='' THEN (CASE WHEN @CondC!='' THEN 'OR' ELSE '' END) ELSE '' END)
	+ @CondC +
	(CASE WHEN @CondA!='' OR @CondB!='' OR @CondC!='' THEN ')' ELSE '' END) +
	(CASE WHEN @CondA!='' OR @CondB!='' OR @CondC!='' THEN 'AND' ELSE '' END) + '
	(T.Valor>0) ORDER BY T.Tipo DESC'
 
	EXEC(@Sql)

FUNCIONA PERFECTO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 67
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta combinada para un campo SQL

Publicado por Ana (34 intervenciones) el 24/04/2018 18:29:09
Hola Carlos,

Enhorabuena!!!

Un saludo
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