ドキュメントで何かを見つけるのは難しいことは間違いありません。しかし、ConnectのWebサイトを検索して、この宝石を見つけることができました:
現在、通常の集計関数と同じように、OVER句とPARTITIONBYでCLR集計を使用できます。ウィンドウ関数のサポートができたら...
これはMicrosoftからの回答でした。
ただし、Connectサイトでの検索は、古いマシンが新しいデータベースプロジェクトを作成し、この集計を作成するのを待っている間に行ったことです。
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());
}
}
次に、次のスクリプトを実行します:
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)
生成するもの:
------------
abc
abc
ghi
ghi
これは長い道のりです。試してみるだけで、自分で答えを簡単に見つけることができます。