これは非常に優れたアプローチであり、かなり受け入れられています。いくつかのアプローチがあり、この ブログ投稿 たくさん説明します
存在する興味深いアプローチの 1 つは、CLR を使用して作業を行うことです。これにより、外部コードを実行するというトレードオフでクエリの複雑さが大幅に軽減されます。アセンブリでクラスがどのように見えるかのサンプルを次に示します。
using System;using System.Collections.Generic;using System.Data.SqlTypes;using System.IO;using Microsoft.SqlServer.Server;[Serializable][SqlUserDefinedAggregate(Format.UserDefined, MaxByteSize=8000)] public struct strconcat :IBinarySerialize{ プライベート リストの値。 public void Init() { this.values =new List(); } public void Accumulate(SqlString value) { this.values.Add(value.Value); } public void Merge(strconcat value) { this.values.AddRange(value.values.ToArray()); } public SqlString Terminate() { return new SqlString(string.Join(", ", this.values.ToArray())); } public void Read(BinaryReader r) { int itemCount =r.ReadInt32(); this.values =新しい List(itemCount); for (int i =0; i <=itemCount - 1; i++) { this.values.Add(r.ReadString()); } } public void Write(BinaryWriter w) { w.Write(this.values.Count); foreach (this.values の文字列 s) { w.Write(s); }}}コード> プレ>
そして、それはこのようなクエリになります.
SELECT CategoryId, dbo.strconcat(ProductName) FROM Products GROUP BY CategoryId;
プレ>
これは明らかにかなり単純です。価値があると思ってください:)
こんにちは!