J'ai besoin d'un moyen pour joindre une table avec les résultats d'une fonction. Je ne suis pas sûr que ce soit possible et je ne pense pas que ce soit une bonne idée. Laissez-moi essayer et expliquer la situation.Jointure corrélée avec les champs externes en tant que paramètres
Il y a une table [entités]:
[ID] [Description] [kWh] [kVArh] [kVAh] [OfferID] [CustomOfferID]
Une autre table [Data]:
[ID] [Timestamp] [Value]
Et une fonction:
[Calc] (@offer, @customOffer, @kWh, @kVArh, @kVAh, @dtStart, @dtEnd)
Vous pouvez voir qu'il ya des entités , les données des entités (utilisation) et une fonction pour calculer le coût.
Je dois montrer l'utilisation et le coût de plusieurs ENTITES:
[Description] [MWh] [MVA] [Cost]
[MWh]
sera une somme de toutes les données de l'entité au cours de la période; [MVA]
sera le MAX de toutes les données sur la période; et [Cost]
SUM le champ [Cost]
de la sous-requête (fonction).
La requête que je pensais ferait les emplois ressemble à ceci:
SELECT [tc].[ID], [tc].[Desc]
, SUM([kWh].[Value])/1000 AS [MWh]
, MAX([kVAh].[Value])/1000 AS [MVA]
, SUM([cost].[Cost])
FROM [Tree_Cost] AS [tc]
INNER JOIN [Data] AS [kWh] ON [tc].[kWh] = [kWh].[ID]
INNER JOIN [Data] AS [kVAh] ON [tc].[kVAh] = [kVAh].[ID]
INNER JOIN
(
SELECT [tc].[ID], [Cost]
FROM [Calc] ([tc].[Offer_ID], [tc].[OfferCustom_ID], [tc].[kWh], [tc].[KVArh], [tc].[kVAh], @dtStart, @dtEnd)
) AS [cost] ON [tc].[ID] = [cost].[ID]
WHERE [tc].[Type] = 1 AND [tc].[TypeDesc] = 'GF_K_M'
AND [kWh].[Timestamp] BETWEEN @dtStart AND @dtEnd
AND [kVAh].[Timestamp] BETWEEN @dtStart AND @dtEnd
GROUP BY [tc].[ID], [tc].[Desc]
Le vrai problème est ici que je dois inclure la [ID]
de la requête externe dans le jeu de résultats de la requête interne (fonction) afin de pouvoir rejoindre les deux. Ensuite, je dois également pouvoir utiliser les champs de la requête externe comme arguments pour la requête interne (fonction).
Ce n'est évidemment pas le cas car l'identificateur [tc]
n'est pas reconnu dans la requête interne. Alors, comment suis-je censé accomplir quelque chose comme ça?
CREATE FUNCTION [dbo].[Calc]
(\@intOffer [int]
, \@intCustom [int]
, \@intP [int]
, \@intQ [int]
, \@intS [int]
, \@dtStart [datetime]
, \@dtEnd [datetime]
)
RETURNS TABLE
([Entry] [nvarchar](200) NULL
, [Rate] [float] NULL
, [Unit] [nvarchar](50) NULL
, [Reading] [float] NULL
, [Cost] [float] NULL
, [DDate] [nvarchar](50) NULL
)
WITH EXECUTE AS CALLER
AS EXTERNAL NAME [OfferCalcLite].[UserDefinedFunctions].[SqlArray]
Qu'est-ce '[Calc]'? –
@ypercube: "Et une fonction:' [Calc] (@offer, @customOffer, @kWh, @kVArh, @kVAh, @dtStart, @dtEnd) '" – Jacob
@cularis: J'essaie de comprendre où cette la fonction est utilisée. @ that0th3rGuy: Est-il utilisé pour calculer '[Cost]'? –