我在[PortfelID]列中遇到了一些問題。我需要它的ID才能夠在函數中使用它,這將返回給我關於每個客戶端的策略類型的名稱。但是,通過這樣做,我需要將[PortfelID]放入GroupBy
,這會使結果變得複雜。sql選擇查詢的問題
我正在尋找一種方法來找到這種策略的戰略類型和金錢總和。但是,如果我使用Group By [PortfelID]
,我會爲每個策略獲取多個條目。實際上超過700行(因爲有700個[PortfelID]值)。我想要的只是1策略和[WycenaWartosc]的總和。所以總共我會得到15行左右
有沒有辦法使用該功能,而不必在Group By中添加[PortfelID]?
DECLARE @data DateTime
SET @data = '20100930'
SELECT [dbo].[ufn_TypStrategiiDlaPortfelaDlaDaty] ([PortfelID], @data)
,SUM([WycenaWartosc]) AS 'Wycena'
FROM[dbo].[Wycena]
LEFT JOIN [KlienciPortfeleKonta]
ON [Wycena].[KlienciPortfeleKontaID] = [KlienciPortfeleKonta].[KlienciPortfeleKontaID]
WHERE [WycenaData] = @data
GROUP BY [PortfelID]
其中[DBO] [ufn_TypStrategiiDlaPortfelaDlaDaty]是這樣定義的:
ALTER FUNCTION [dbo].[ufn_TypStrategiiDlaPortfelaDlaDaty]
(
@portfelID INT,
@data DATETIME
)
RETURNS NVARCHAR(MAX)
AS BEGIN
RETURN (SELECT TOP 1
[TypyStrategiiNazwa]
FROM [dbo].[KlienciPortfeleUmowy]
INNER JOIN [dbo].[TypyStrategii]
ON dbo.KlienciPortfeleUmowy.TypyStrategiiID = dbo.TypyStrategii.TypyStrategiiID
WHERE [PortfelID] = @portfelID
AND ([KlienciUmowyDataPoczatkowa] <= @data
AND ([KlienciUmowyDataKoncowa] >= @data
OR KlienciUmowyDataKoncowa IS NULL)
)
ORDER BY [KlienciUmowyID] ASC
)
end
編輯:
按照建議(Roopesh於授予Majeti)我做了這樣的事情:
SELECT SUM(CASE WHEN [dbo].[ufn_TypStrategiiDlaPortfelaDlaDaty] ([PortfelID], @data) = 'portfel energetyka' THEN [WycenaWartosc] ELSE 0 END) AS 'Strategy 1'
,SUM(CASE WHEN [dbo].[ufn_TypStrategiiDlaPortfelaDlaDaty] ([PortfelID], @data) = 'banków niepublicznych' THEN [WycenaWartosc] ELSE 0 END) AS 'Strategy 2'
FROM [dbo].[Wycena]
LEFT JOIN [KlienciPortfeleKonta]
ON [Wycena].[KlienciPortfeleKontaID] = [KlienciPortfeleKonta].[KlienciPortfeleKontaID]
WHERE [WycenaData] = @data
但是,這似乎有點矯枉過正,需要太多的手工工作。 AlexS解決方案似乎正是我所需要的:-)
如果我離開'[PortfelID]'沒有GROUP BY - >'消息8120,級別16,狀態1,行16 列'KlienciPortfeleKonta.PortfelID'在選擇列表中是無效的,因爲它不包含在聚合函數中或GROUP BY子句。 ' – MadBoy 2010-11-07 18:10:41
如果我添加GROUP BY [PortfelID])作爲Q'因爲它不包含在聚合函數或GROUP BY子句中,所以'Column'Q.Wycena'在選擇列表中無效。「# – MadBoy 2010-11-07 18:11:35
對不起爲此 - 看起來我忘了修復選擇列表/聚合。更新了我的答案。 HTH。 – AlexS 2010-11-07 18:34:46