我想让我的函数返回一个带有一些值的A表
我必须在更新中修复某些问题,但我不知道下面是什么函数FngetTableH
ALTER FUNCTION [dbo].[FnGetTableH] ( @Date DateTime ) RETURNS @Listeab_ Table(CLOSING_PRICE money,IdValeur int) AS BEGIN Insert @Listeab_ ( CLOSING_PRICE ,IdValeur) select Distinct 0 , IdValeur From Historique Update @Listeab_ Set CLOSING_PRICE = (Select CLOSING_PRICE from Historique H inner join (Select MAX(@Date) As DATEDU,IdValeur FROM Historique where DATE_NEGO<= @Date group by IdValeur ) L2 on H.DATE_NEGO=L2.DATEDU and H.IdValeur=L2.IdValeur ) return END
当我执行此代码时
declare @Date date = '10/09/2013' ---select*from FnGetTableH(@Date) select C.IdClient,H.IdValeur,C.RaisonSocial,SUM( case I.sens WHEN 'c' then + I.Qantite WHEN'd' then - I.Qantite END) as 'Solde', H.closing_price from Imputations I Inner join FnGetTableH(@Date) H on H.IdValeur=I.IdValeur Inner join Clients C on C.IdClient=I.IdClient where I.DateImputation=@Date group by C.IdClient,RaisonSocial,H.closing_price,H.IdValeur Order by IdClient asc
我明白了
消息512,尼维奥16,脡1,利格内4拉索斯-拉克锚定了一个重游茅草的山谷。最基本的表达方式是=,!=,<,<=,>,> = ouquételle est utilis茅e entant qu’expression。L’instruction a茅特茅arr锚t茅e。
在您最里面的查询中,我认为MAX(@Date)应该是MAX(DATE_NEGO),这可能解释了为什么收盘价查询返回多个结果。
仍然有可能出现多个结果,因此您可能需要考虑这一点。如果这无关紧要,则可以选择max(closing_price),尽管我怀疑这可能会发生,在这种情况下,您需要进行一些排序才能选择正确使用的价格。
编辑:试试这个:
ALTER FUNCTION [dbo].[FnGetTableH] ( @Date DATETIME ) RETURNS @Listeab_ TABLE ( CLOSING_PRICE MONEY, IdValeur INT ) AS BEGIN WITH prices AS ( SELECT IdValeur, CLOSING_PRICE, ROW_NUMBER() OVER (PARTITION BY IdValuer ORDER BY DATE_NEGO DESC) rn FROM Historique WHERE DATE_NEGO <= @Date ) INSERT @Listeab_(CLOSING_PRICE, IdValeur) SELECT DISTINCT ISNULL(p.CLOSING_PRICE, 0), h.IdValeur FROM Historique h LEFT OUTER JOIN prices p ON h.IdValeur = p.IdValeur AND p.rn = 1 RETURN; END;