J'ai une fonction complexe que je veux utiliser en nombre de requêtes. Il obtient une liste de valeurs et renvoie une valeur agrégée.Comment passer le type de table défini par l'utilisateur à la fonction inline
Par exemple (je simplifie, il est plus complexe en action):
CREATE FUNCTION Mean(@N Numbers READONLY)
RETURNS TABLE AS RETURN (
SELECT mean = SUM(n.value)/COUNT(*) FROM @N n
)
et je veux l'utiliser dans la requête:
SELECT d.DepartmentName, MeanRate = m.mean
FROM Departments d
CROSS APPLY Mean(
(
SELECT value = e.Rate
FROM Employees e
WHERE e.DepatmentId = d.DepatmentId
)
) m
Mais je reçois une erreur: Opérande type heurt: float est incompatible avec Numbers
Je sais que je peux utiliser le curseur ou passer des valeurs comme XML, mais je pense que ces moyens sont plus lents que la fonction inline et les variables de table. Comment puis-je transmettre une liste de valeurs à la fonction en ligne?
Mais cette requête retourne la valeur pour un seul département, donc je dois créer le curseur pour obtenir tous. – Artem
@Artem - Non, nous passons la valeur de tous les départements. –
Oh, je vois. Mais j'ai besoin d'un taux moyen pour chaque département séparément. – Artem