View Full Version : راه حلی برای مجموع فیلدها
  
sogoli
چهارشنبه 19 تیر 1387, 14:47 عصر
سلام
شرمنده از اینکه عجله دارم و نمی تونم سرچ کنم . ممنون می شم به سوال من پاسخ بدید.
من توی یک تیبل 23 فیلد a , b, c  دارم. و می خوام مجموع انها را بصورت زیر در فیلد d داشته باشم:
a= 23
b=5
c=9
d=2359
night_walker
چهارشنبه 19 تیر 1387, 15:02 عصر
با سلام
من که نفهمیدم که چرا 23 فیلد داری و میخوای اونا رو با هم در یک فیلد داشته باشی ولی این کارتو راه می اندازه
SELECT     a + b + c + d + e AS sum
FROM         Main 
به جای SUM و اسم فیلدها هر چی دوست داری بگذار.
رضا عربلو
چهارشنبه 19 تیر 1387, 18: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
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.