Sql Server

¿Qué función equivale a IIF de Access en Sql Server?
Quiero hacer:
Select iif(isnull(numero),0,numero) from ...
Pero en Sql Server
Gracias
Respuesta
1
Es algo más complicado de escribir, hay que hacerlo con case when. Te pongo un ejemplo sacado de la ayuda:
USE pubs
GO
SELECT Category =
CASE type
WHEN 'popular_comp' THEN 'Popular Computing'
WHEN 'mod_cook' THEN 'Modern Cooking'
WHEN 'business' THEN 'Business'
WHEN 'psychology' THEN 'Psychology'
WHEN 'trad_cook' THEN 'Traditional Cooking'
ELSE 'Not yet categorized'
END,
CAST(title AS varchar(25)) AS 'Shortened Title',
price AS Price
FROM titles
WHERE price IS NOT NULL
ORDER BY type, price
COMPUTE AVG(price) BY type
GO
Gracias una ultima cosa, Por que no tiene la función iif si es sql igual que Access.
¿El sql no es todo igual?
No exactamente, existe un sql estándar, creo que se llama ansi sql 92. Este es un lenguaje limitado con muy pocas funciones que, en teoría, funcionaría para todos los gestores de bases de datos que lo cumplan (Oracle, sql-server, informix, etc.). Por otro lado todos los gestores tienen un sql ampliado que no funcionan para otros gestores de bases de datos. Este es el caso de T-SQL para SQL-Server o PL-SQL para Oracle.
Access también tiene otro lenguaje propio y no todas las funciones existentes en Access están en T-SQL. Supongo que será por cuestiones de eficiencia.

5 respuestas más de otros expertos

Respuesta
1
Lo equivalente sería así:
SELECT CASE WHEN NUMERO IS NULL THEN 0 ELSE NUMERO END AS NombreCampoAux FROM ....
Respuesta
Es que iif no es una función de SQL, sino de Access. Y tampoco la tienen otros SGDBR como Oracle, Informix, DB2, etc... Sólo la tienen Access y algunos lenguajes de programación.
Pare esto tienes la clausula CASE que puedes utilizar en el SELECT. Revisa la ayuda sobre ella, allí tienes una explicación y un ejemplo de uso.
Respuesta
Si necesitas hacer eso mismo
Solo debes hacer lo siguiente
select isnull(campo,0) from tabla
Esafuncion te pregunta si el campo es nulo le coloca un cero
Con respecto a un iif no existe en sql
No lo que quiero es:
Tengo fechas de distintos años y cada una tiene campo importe, quiero sumar cada uno en su año. ¿Total2001 5000?
¿Total2002 6500? ¿Total 2003 8500?.
Con esta sentencia le diría en la select que si el año=2001 que sume el importe y lo vaya acumulando en total2001 por ejemplo y si año 2002 que lo sume en Total2002 etc..
No te entendí muy bien la pregunta, pero podrías hacer algo como esto
Select
(case ano
When 2000 then select @total2000 = @total2000 + importe
when 2001 then select @total2001 = @total2001 + importe
else
@otroano = @otronoano + importe
end
from tabla
Ojala te sirve
MAdkids
Respuesta
-1
Aquí te paso la forma más directa y rápida:
SELECT año, SUM(importe) AS Total
FROM Tabla
GROUP BY año
Puedes utilizar funciones agregadas dependiendo desde dónde realices el query, por ejemplo para una vista ésta es la mejor opción
Tiene que haber una forma por que si quiero sumar unas cantidades según la fecha como hago por ejemplo.
Tengo fechas de distintos años y cada una tiene campo importe, quiero sumar cada uno en su año. ¿Total2001 5000?
¿Total2002 6500? ¿Total 2003 8500?.
Con esta sentencia le diría en la select que si el año=2001 que sume el importe y si año 2002 que lo sume en 2002 etc..
Gracias
Pero tienes que utilizar la función en la condición:
Select * from....
where (... iif(..))
No me has entendido eso que me pones ya lo se. Pero como hago esto:
Tengo fechas de distintos años y cada una tiene campo importe, quiero sumar cada uno en su año. ¿Total2001 5000?
¿Total2002 6500? ¿Total 2003 8500?.
Con esta sentencia le diría en la select que si el año=2001 que sume el importe y si año 2002 que lo sume en 2002 etc..
La sentencia que envié es la correcta para lo que quieres hacer. La sentencia sum()+ el group by, reailzan esl cálculo que tu quieres.
Si haces el select sin utilizar el sum() - Group by te trae una lista de años y montos y con las sentencias sum y group by realizas la distribución.
Si todavía tienes la base pubs en la tabla sales puedes hacer la prueba con este select:
SELECT YEAR(ORD_DATE) AS Año, SUM(qty) AS Total
FROM sales
GROUP BY YEAR(ord_date)
Respuesta
-1
La función if esta definida para SQL SERVER, pero a nivel de programación y no se querys. Para estos casos puedes utilizar la función CASE, por ejemplo:
select case numero when 0 then 'CERO' when 1 then 'UNO' else 'OTRO' from .....
Para este caso en especial, creo que quieres escribir un cero si numero es null y el numero es caso contrario. Utilizalo asi,
SELECT isnull(numero,0) from ....
Isnull toma el siguiente parámetro en caso que el primero sea null, de inmediato sin más código

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas