3
是否可以使用窗口函數(over)的用戶定義聚合(clr)?是否可以使用窗口函數(over)的用戶定義聚合(clr)?
不能在文檔中找到了答案:http://technet.microsoft.com/en-us/library/ms190678.aspx
是否可以使用窗口函數(over)的用戶定義聚合(clr)?是否可以使用窗口函數(over)的用戶定義聚合(clr)?
不能在文檔中找到了答案:http://technet.microsoft.com/en-us/library/ms190678.aspx
你說得對,這是比較難找到的文檔中任何事情。但搜索網站的連接,我設法找到這個gem:
今天,你可以使用CLR積累了與OVER子句和PARTITION BY就像普通的聚合函數。一旦我們支持窗口功能...
這是微軟的迴應。
然而,在搜索上的連接部位爲我做了什麼,而我在等我的年齡機創建一個新的數據庫項目和創建此聚集:
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
這是一個很長的路要說 - 你可以很容易地發現自己的答案只需嘗試它。
但是'ORDER BY','ROWS'和'RANK'似乎都不被'OVER'子句支持。這只是給出了一個語法錯誤。 – Jens
@Jens - MS連接項目承諾的所有內容都是「PARTITION BY」。如果您考慮如何定義CLR聚合(特別是'合併'),您將意識到,在他們當前的形式下,他們無法支持其他部分(我們失去了訂購信息) –
我鼓勵人們對[連接問題](https://connect.microsoft.com/SQLServer/feedback/details/586867/user-defined-ranking-functions),所以微軟更有可能在某一天實際執行此操作。 – MgSam