select Customer,Adress,Person,BillNo from v_getCustomer Where 1=1 + @Where
其中:
v_getCustomer 是一个视图
BillNo爲一个非空唯一的字段
@Where爲動態的查詢條件,通過代碼傳遞過來。
例如
Customer BillNo Person Address
A公司 发票编号1 王小姐 地址A
A公司 发票编号2 李先生 地址A
A公司 发票编号3 王小姐 地址A
A公司 发票编号4 陆先生 地址AB公司 发票编号5 赵先生 地址B
B公司 发票编号6 李小姐 地址B
现在需要处理数据
同一公司的数据合併爲一条数据
例:
Customer Address Person
A公司 地址A 王小姐 /李先生/陆先生
B公司 地址B 赵先生/李小姐
一个Customer 可能有多条记录,但是 Customer,Address相同,不会发生改变,BillNo唯一就是说。同一公司,地址保留一个,联系人合併,用/分隔,如爲同一个人,则显示一个.
例如例子中:
A公司有4条记录,但组合成一条记录,其中Customer保留1个,Address保留一个,Person组合起来,用/分隔,但是有两个王小姐,所以保留一个王小姐数据库是SQL2000请问,应怎样通过存储过程获取所需要格式地数据?
其中:
v_getCustomer 是一个视图
BillNo爲一个非空唯一的字段
@Where爲動態的查詢條件,通過代碼傳遞過來。
例如
Customer BillNo Person Address
A公司 发票编号1 王小姐 地址A
A公司 发票编号2 李先生 地址A
A公司 发票编号3 王小姐 地址A
A公司 发票编号4 陆先生 地址AB公司 发票编号5 赵先生 地址B
B公司 发票编号6 李小姐 地址B
现在需要处理数据
同一公司的数据合併爲一条数据
例:
Customer Address Person
A公司 地址A 王小姐 /李先生/陆先生
B公司 地址B 赵先生/李小姐
一个Customer 可能有多条记录,但是 Customer,Address相同,不会发生改变,BillNo唯一就是说。同一公司,地址保留一个,联系人合併,用/分隔,如爲同一个人,则显示一个.
例如例子中:
A公司有4条记录,但组合成一条记录,其中Customer保留1个,Address保留一个,Person组合起来,用/分隔,但是有两个王小姐,所以保留一个王小姐数据库是SQL2000请问,应怎样通过存储过程获取所需要格式地数据?
select Customer,Adress,Person,BillNo from v_getCustomer Where 1=1 + @Where 其中:
v_getCustomer 是一个视图
BillNo爲一个非空唯一的字段
@Where爲动态的查询条件,通过代码传递过来。
例如
Customer BillNo Person Address
A公司 发票编号1 王小姐 地址A
A公司 发票编号2 李先生 地址A
A公司 发票编号3 王小姐 地址A
A公司 发票编号4 陆先生 地址AB公司 发票编号5 赵先生 地址B
B公司 发票编号6 李小姐 地址B
现在需要处理数据
同一公司的数据合併爲一条数据
例:
Customer Address Person
A公司 地址A 王小姐 /李先生/陆先生
B公司 地址B 赵先生/李小姐
一个Customer 可能有多条记录,但是 Customer,Address相同,不会发生改变,BillNo唯一就是说。同一公司,地址保留一个,联系人合併,用/分隔,如爲同一个人,则显示一个.
例如例子中:
A公司有4条记录,但组合成一条记录,其中Customer保留1个,Address保留一个,Person组合起来,用/分隔,但是有两个王小姐,所以保留一个王小姐数据库是SQL2000请问,应怎样通过存储过程获取所需要格式地数据?
declare @sql varchar(8000) set @sql=''
set @sql='select Customer,Adress,Person,BillNo
from v_getCustomer Where 1=1 '+ @Where
exec(@sql)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @r varchar(8000)
SET @r = ''
SELECT @r = @r + ',' + Person FROM ls WHERE Customer=@Customer and Address=@Address
RETURN STUFF(@r, 1, 1, '')
ENDgocreate Proc CreategetCustomer
@where varchar(1000)
AS
Begin
declare @sql varchar(1000)
set @sql='select Customer,Address,Person into ls from v_getCustomer where 1=1 '
+@where+' group by Customer,Address,Person'
exec(@sql)
select Customer,Address,dbo.f_str(Customer,Address) from ls
drop table lsendgoexec CreategetCustomer 'and BillNo>=发票编号1'
豆子,你好,謝謝你的回答
不過好象還有些問題。現在需要是同一個公司只出現一條記錄,但是按照你提供的方法
同一個公司會出現多條記錄,請問,這應該怎樣解決
AMD USA Sid
Mis USA Bill,Jone
Mis USA Bill,Jone
因爲它需要作爲主鍵
5樓和6樓的問題已經解決了,但是又發現一個問題
Mis USA Bill,Jone,Bill 1
如果存在相同的記錄,就無法去除重複了。。
BillNo Cuntomer Adress Person
1 MIS BJ Bill
2 MIS BJ Bill
这个要求有问题哟,既然都按公司和地址分组了,BillNo又怎么唯一啊,还怎么查询呢?
select Customer,Address,dbo.f_str(Customer,Address) from ls
改为
select Customer,Address,dbo.f_str(Customer,Address) from ls group by Customer,Address
drop table v_getCustomer;
go
create table v_getCustomer
(
BillNo int not null primary key,
Customer nvarchar(25) not null,
Address nvarchar(100) not null,
Person nvarchar(25) not null
)insert into v_getCustomer
select 1, 'A公司', '地址A', '王小姐' union all
select 2, 'A公司', '地址A', '李先生' union all
select 3, 'A公司', '地址A', '王小姐' union all
select 4, 'A公司', '地址A', '陆先生' union all
select 5, 'B公司', '地址B', '赵先生' union all
select 6, 'B公司', '地址B', '李小姐'
goalter function dbo.f_str(@Customer varchar(100),@Address varchar(100))
returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r = '' select @r = @r + '/' + Person
from v_getCustomer
where Customer = @Customer
and Address = @Address return STUFF(@r, 1, 1, '')
end
go
alter proc CreategetCustomer
@where varchar(1000)
AS
Begin
declare @sql varchar(1000)
set @sql='select min(BillNo) as BillNo, Customer,Address,Person into ls from v_getCustomer where 1=1 '
+@where+' group by Customer,Address,Person'
exec(@sql)
select min(BillNo) as BillNo, Customer,Address,dbo.f_str(Customer,Address) as Persons from ls group by Customer, Address
drop table lsend
goexec CreategetCustomer ''
/*
结果
(5 行受影响)
BillNo Customer Address Persons
----------- ------------------------- -------- --------------------------------------1 A公司 地址A 王小姐/李先生/王小姐/陆先生
5 B公司 地址B 赵先生/李小姐
*/
謝謝豆子和bala7229291