PDA

View Full Version : راه حلی برای مجموع فیلدها



sogoli
چهارشنبه 19 تیر 1387, 13:47 عصر
سلام
شرمنده از اینکه عجله دارم و نمی تونم سرچ کنم . ممنون می شم به سوال من پاسخ بدید.

من توی یک تیبل 23 فیلد a , b, c دارم. و می خوام مجموع انها را بصورت زیر در فیلد d داشته باشم:

a= 23
b=5
c=9

d=2359

night_walker
چهارشنبه 19 تیر 1387, 14:02 عصر
با سلام
من که نفهمیدم که چرا 23 فیلد داری و میخوای اونا رو با هم در یک فیلد داشته باشی ولی این کارتو راه می اندازه

SELECT a + b + c + d + e AS sum
FROM Main
به جای SUM و اسم فیلدها هر چی دوست داری بگذار.

رضا عربلو
چهارشنبه 19 تیر 1387, 17:11 عصر
شما می توانید از Custom Aggregate ها استفاده کنید مثل:


using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
[Serializable]
[SqlUserDefinedAggregate(
Format.UserDefined, // user-defined serialization
IsInvariantToDuplicates = false, // duplicates matter
IsInvariantToNulls = true, // don't care about NULLs
IsInvariantToOrder = false, // order matters (ignored)
IsNullIfEmpty = false, // don't yield NULL if empty set
MaxByteSize = 8000)] // maximum size in bytes
public struct StringConcat : IBinarySerialize
{
private StringBuilder sb;
public void Init()
{
this.sb = new StringBuilder();
}
public void Accumulate(SqlString s)
{
if (s.IsNull)
{
return; // skip NULLs
}
else
{
this.sb.Append(s.Value);
}
}
public void Merge(StringConcat Group)
{
this.sb.Append(Group.sb);
}
public SqlString Terminate()
{
return new SqlString(this.sb.ToString());
}
public void Read(BinaryReader r)
{
sb = new StringBuilder(r.ReadString());
}
public void Write(BinaryWriter w)
{
if (this.sb.Length > 4000) // limit sb to 8000 bytes
w.Write(this.sb.ToString().Substring(0, 4000));
else
w.Write(this.sb.ToString());
}
} // end StringConcat


و یا اگر هیچگونه گروه بندی نداشته باشید توسط یک فانکشن :


Declare @Result NVARCHAR(Max);
SELECT @Result =@Result +Field1 From Table1;
RETUN @Result