View Full Version : ادغام ردیفهای دارای کد مشابه در یک ردیف
sh
جمعه 13 بهمن 1385, 12:33 عصر
سلام
یه جدول داریم با محتویات زیر
1- شماره حواله 2- تاریخ و .....
در جدول دوم :
1- شماره حواله 2- کد کالا و ....
به ازای هر شماره حواله در جدول اول ما چند رکورد در جدول دوم داریم که مشخص میشود حواله شماره فلان چند کالا داشته
برای اینکه به کاربر نشون بدم با شماره حواله چه کالاهائی ارسال شده میشه با دو DataGridView حالت مستر دیتیل رو بوجود آورد ولی آیا میشه حالت زیر رو هم داشت ؟
حواله 1 || کالای 1 - کالای 2 - کالای 3
حواله 2 || کالای 2- کالای 4
.....
یعنی ردیفها یجوری خلاصه شده و در یک دیتاگرید نشان داده شود
منتظر راهنمائی دوستان هستم
AminSobati
جمعه 13 بهمن 1385, 23:50 عصر
اگر SQL Server 2005 استفاده میکنید، به زیبایی هر چه تمامتر میتونید با User Defined Aggregate در محیط Dot NET این کار رو انجام بدین! اما در SQL Server 2000 هم قابل انجامه:
من این مثال رو برای اینکه شهرها جلوی نام کشور قرار بگیرند نوشته بودم:
use northwind
go
create function fn_SumBC (@acc nvarchar(40))
returns nvarchar(4000)
as
begin
declare @SumBC nvarchar(4000)
set @SumBC=''
select @SumBC=@SumBC+city+',' from
(SELECT distinct city, country FROM customers) tmp
where country = @acc
set @SumBC= left(@SumBC,len(@SumBC)-1)
return @SumBC
end
go
select country,dbo.fn_SumBC (country) from customers group by country
sh
شنبه 14 بهمن 1385, 15:42 عصر
سلام امین جان
آیا این کدی که نوشتی مخصوص نسخه 2005 هست یا برای ورژن 2005 راه ساده تری هم هست ؟چون من از Sql Express 2005 استفاده میکنم
AminSobati
شنبه 14 بهمن 1385, 18:12 عصر
این کد برای همه ورژنهای SQL Server کار میکنه! برای 2005 همونطور که عرض کردم از User Defined Aggregate میشه استفاده کرد که اساسا برای همین منظوره
sh
شنبه 14 بهمن 1385, 20:36 عصر
سلام
من از SqlExpress 2005 استفاده میکنم ممکنه خواهش کنم یه مثال در مورد حل این مشکل با User Defined Aggregate برام بنویسی
ممنون
AminSobati
شنبه 14 بهمن 1385, 21:52 عصر
این کد در Dot NET باید Compile بشه و در SQL Server تبدیل بشه به UDA، اما بعید میدونم بدون اطلاعات کافی از Integration بین SQL Server و Dot NET بتونین از این قابلیت استفاده کنین. منظورم اینه که این کار به سر راستی اجرا کردن یک Script نیست.
Imports System
Imports System.Data
Imports Microsoft.SqlServer.Server
Imports System.Data.SqlTypes
Imports System.IO
Imports System.Text
<Serializable(), SqlUserDefinedAggregate(Format.UserDefined, IsInvariantToNulls:=True, IsInvariantToDuplicates:=False, IsInvariantToOrder:=False, MaxByteSize:=8000)> _
Public Class Concatenate
Implements IBinarySerialize
Private intermediateResult As StringBuilder
Public Sub Init()
Me.intermediateResult = New StringBuilder()
End Sub
Public Sub Accumulate(ByVal value As SqlString)
If value.IsNull Then
Return
End If
Me.intermediateResult.Append(value.Value).Append(","c)
End Sub
Public Sub Merge(ByVal other As Concatenate)
Me.intermediateResult.Append(other.intermediateRes ult)
End Sub
Public Function Terminate() As SqlString
Dim output As String = String.Empty
If Not (Me.intermediateResult Is Nothing) AndAlso Me.intermediateResult.Length > 0 Then
output = Me.intermediateResult.ToString(0, Me.intermediateResult.Length - 1)
End If
Return New SqlString(output)
End Function
Public Sub Read(ByVal r As BinaryReader) Implements IBinarySerialize.Read
intermediateResult = New StringBuilder(r.ReadString())
End Sub
Public Sub Write(ByVal w As BinaryWriter) Implements IBinarySerialize.Write
w.Write(Me.intermediateResult.ToString())
End Sub
End Class
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.