Bạn nói đúng rằng thật khó để tìm thấy bất cứ điều gì trong tài liệu. Nhưng khi tìm kiếm trên trang web Connect, tôi đã tìm thấy viên ngọc này:
Ngày nay, bạn có thể sử dụng các tổng hợp CLR với mệnh đề OVER và PARTITION BY giống như các hàm tổng hợp thông thường. Sau khi chúng tôi có hỗ trợ cho các chức năng cửa sổ ...
Đó là phản hồi từ Microsoft.
Tuy nhiên, tìm kiếm trên trang Connect là điều tôi đã làm trong khi chờ máy cũ của mình tạo một dự án cơ sở dữ liệu mới và tạo tổng hợp này:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.IO;
using Microsoft.SqlServer.Server;
[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedAggregate(Format.UserDefined,MaxByteSize = 2000)]
public struct SqlAggregate1 : IBinarySerialize
{
private SqlString last;
public void Init()
{
// Ignore
}
public void Accumulate(SqlString Value)
{
last = Value;
}
public void Merge (SqlAggregate1 Group)
{
// Ignore
}
public SqlString Terminate ()
{
// Put your code here
return last;
}
public void Read(BinaryReader r)
{
last = new SqlString(r.ReadString());
}
public void Write(BinaryWriter w)
{
w.Write(last.ToString());
}
}
Và sau đó chạy tập lệnh này:
select dbo.SqlAggregate1(Column2) OVER (PARTITION BY Column1)
from (select 1,'abc' union all select 1,'def' union all
select 2,'ghi' union all select 2,'jkl') as t(Column1,Column2)
Sản xuất:
------------
abc
abc
ghi
ghi
Đó là một chặng đường dài để nói - bạn có thể dễ dàng tìm ra câu trả lời cho chính mình chỉ bằng cách thử nó.