Создание настраиваемой агрегации «First_Value» для SQL Server - PullRequest
0 голосов
/ 22 декабря 2018

Я создал новый пользовательский агрегат в Visual Studio (CLR) для SQL Server.SQL Server выполняет функцию «накопления» на каждой итерации, и мы не хотим этого.Мы хотим запустить Accumulate только один раз для первой строки в каждой группе.Как я могу это сделать?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
using System.IO;
using System.Runtime.InteropServices;

[Serializable]
[SqlUserDefinedAggregate(Format.Native,
                         IsInvariantToDuplicates = false,
                         IsInvariantToNulls = true,
                         IsInvariantToOrder = true,
                         IsNullIfEmpty = true,
                         Name = "MyStruct")]
public struct MyStruct
{
    float myResult;

    public void Init()
    {
        myResult = 0;
    }

    public void Accumulate(SqlDouble myValue)
    {    
        if (!myValue.IsNull)
        {
            myResult = (float)myValue;
        }
    }

    public void Merge(MyStruct group)
    {
         myResult = group.myResult;
    }

    public SqlDouble Terminate()
    {
         if (myResult != 0)
         {
              return new SqlDouble(myResult);
         }
         else
         {
              return SqlDouble.Null;
         }
    }
}
...