Modulo e IIF

25/04/2006 - 18:27 por Kyoshiro | Informe spam
Disculpen tengo una duda, en una consulta SQL obtengo como parametro el
numero del mes.

Para los meses pares se toman algunos dias y para los meses impares se
toman otros dias.
Por ejemplo

MES = 4 entonces solo los dias del 20-30 y del 1-5
MES = 5 entonces solo los dias del 6-19

Mi pregunta es como hacer una consulta SQL que me ayude a resolver este
problema

Saludos

Preguntas similare

Leer las respuestas

#1 Salvador Ramos
25/04/2006 - 18:50 | Informe spam
Hola,

Transact SQL no dispone de IIF, debes utilizar CASE. Busca en la ayuda y
verás ejemplos de uso.
Si tienes cualquier duda nos la cuentas.

Un saludo
Salvador Ramos
Murcia - España

[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL Server y .NET)


"Kyoshiro" escribió en el mensaje
news:
Disculpen tengo una duda, en una consulta SQL obtengo como parametro el
numero del mes.

Para los meses pares se toman algunos dias y para los meses impares se
toman otros dias.
Por ejemplo

MES = 4 entonces solo los dias del 20-30 y del 1-5
MES = 5 entonces solo los dias del 6-19

Mi pregunta es como hacer una consulta SQL que me ayude a resolver este
problema

Saludos

Respuesta Responder a este mensaje
#2 Kyoshiro
25/04/2006 - 19:28 | Informe spam
Tengo esto

SELECT *
FROM COMPRAS
WHERE (CASE (CAST(@MES AS NUMERIC)%2)
WHEN 0 THEN DIA IN
('1','2','3','4','5','21','22','23','24','25','26','27','28','29','30')
*


WHEN 1 DIA IN
('6','7','8','9','10','11','12','13','14','15','16','17','18','19')
END )

Me dice que tengo error en el primer IN > *

No se sei hay auna alternativa o donde este el error
Respuesta Responder a este mensaje
#3 Alejandro Mesa
25/04/2006 - 20:17 | Informe spam
Kyoshiro,

Con el permiso de Salvador (Saludos!).

Trata con la siguiente sentencia:

SELECT
*
FROM
dbo.COMPRAS
WHERE
DIA between case when @MES % 2 = 0 then 1 end and case when @MES % 2 = 0
then 5 end
or
DIA between case when @MES % 2 = 0 then 21 end and case when @MES % 2 = 0
then 30 end
or
DIA between case when @MES % 2 > 0 then 6 end and case when @MES % 2 > 0
then 19 end
go

Como un dia no puede estar en ambos conjuntos a la vez, entonces puede que
obtengas mejor rendimiento usando:

SELECT
*
FROM
dbo.COMPRAS
WHERE
DIA between case when @MES % 2 = 0 then 1 end and case when @MES % 2 = 0
then 5 end
union all
SELECT
*
FROM
dbo.COMPRAS
WHERE
DIA between case when @MES % 2 = 0 then 21 end and case when @MES % 2 = 0
then 30 end
union all
SELECT
*
FROM
dbo.COMPRAS
WHERE
DIA between case when @MES % 2 > 0 then 6 end and case when @MES % 2 > 0
then 19 end
go


De todas maneras te recomiendo que hagas una prueba y veas cual sentencia
tiene mejor rendimiento.


AMB

"Kyoshiro" wrote:

Tengo esto

SELECT *
FROM COMPRAS
WHERE (CASE (CAST(@MES AS NUMERIC)%2)
WHEN 0 THEN DIA IN
('1','2','3','4','5','21','22','23','24','25','26','27','28','29','30')
> *
WHEN 1 DIA IN
('6','7','8','9','10','11','12','13','14','15','16','17','18','19')
END )

Me dice que tengo error en el primer IN > *

No se sei hay auna alternativa o donde este el error


Respuesta Responder a este mensaje
#4 Kyoshiro
27/04/2006 - 18:13 | Informe spam
Muchas gracisa, me ayudo mas la primera forma.

Saludos
Respuesta Responder a este mensaje
#5 Kyoshiro
27/04/2006 - 18:14 | Informe spam
Muchas gracias, me ayudo mas la primera forma.

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