這個問題在SO中已經問了很多次,但沒有一個答案對我的情況滿意。在GROUP BY後連接一個字段
我處理一個包含多個版本的大約120萬唯一對象(增加)DataObjectVersions
表。我需要爲每個唯一對象連接來自特定字段的更改。
現在我正在使用Q3中提供的XML Path的解決方案,但在此表上運行這樣的查詢是一個總體性能災難。 SQL Server在19mn後開始重新調用數據。知道這些數據將會加入兩次以上,你可以想象這種影響。
我正在尋找最高效的可伸縮性感知方式來連接由其他字段(當然不是鍵)分組的不同行的相同字段的值。更確切地說,這是在Datawarehouse的視圖中使用的。
編輯:
我試圖簡化描述,但這裏是一個完整的概述 我有多個表與視圖用於返回所有的工會下面列
[ID] [CreatedTime] [CreatedBy] [DeletedTime] [DeletedBy] [ResourceId] [AccountId] [Type]
來自所有表格的記錄,這些記錄仍然會返回相同的列(在我的問題中由版本表格描述)。 [ResourceId]
和[AccountId]
是對象(組成員資格,系統帳戶等)的唯一組合標識符。 [Type]
用於標識不同的級別(如文件分配時的讀/寫/執行)
所有其他字段對於不同的唯一對象包含相同的值(在不同的表中)。我需要獲取對象並連接[Type]
列的值。所有行都在後面處理,並且([ResourceId]
,[AccountId]
)組合必須是唯一的(不同類型存在時不是這種情況)。
編輯2:
我使用這個功能:
CREATE FUNCTION [dbo].[GetUniqueType]
(
@ResourceId as uniqueidentifier,
@Account as uniqueidentifier
)
RETURNS nvarchar(100)
AS
BEGIN
return STUFF((select ',' + raType.Type from vwAllAssignments raType where raType.AccountId = @Account and raType.ResourceId = @ResourceId and raType.DeletedBy is null for xml path('')), 1,1,'')
END
GO
vwAllAssignments
是返回所有錶行的工會的看法。
最後我選擇
SELECT [CreatedTime]
,[DeletedTime]
,[DeletedBy]
,[ResourceId]
,[AccountId]
,dbo.GetUniqueType([ResourceId],[AccountId]) AS [Type]
FROM vwAllAssignments
GROUP BY [ResourceId], [AccountId], [CreatedTime], [DeletedTime], [DeletedBy]
你指的是具有類似 「對象」, 「V1,V2,V3,V4」? – Diego
是的,但僅適用於特定列,並非所有列如連接類型或更改不同版本的日期 –
請顯示您的數據庫佈局。我在較大的表上使用SQL Server 8中的連接,並獲得更好的性能。我懷疑一些放置好的索引將解決性能問題。 –