合并id字段和value

create table tb(单号 varchar(10),类别 varchar(10))
insert into tb values('001', 'A')
insert into tb values('001', 'A')
insert into tb values('001', 'D')
insert into tb values('002', 'B')
insert into tb values('002', 'C')
insert into tb values('002', 'C')
insert into tb values('003', 'A')
insert into tb values('003', 'B')
go

create function dbo.f_str(@单号 varchar(10)) returns varchar(20)
as
begin
 
declare @str varchar(1000)
 
select @str = isnull(@str + '-' , '') + cast(类别 as varchar) from (select distinct * from tb) t where 单号 = @单号
 
return @str
end
go

--调用函数
select 类别 = 单号 + '-' + dbo.f_str(单号) from (select distinct * from tb) t group by 单号

drop function dbo.f_str
drop table tb

/*
类别                             
-------------------------------
001-A-D
002-B-C
003-A-B

(所影响的行数为 3 行)
*/

/*
标题:按某字段合并字符串之一(简单合并)
作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
时间:2008-11-06
地点:广东深圳

描述:将如下形式的数据按id字段合并value字段。
id    value
----- ------
1     aa
1     bb
2     aaa
2     bbb
2     ccc
需要得到结果:
id     value
------ -----------
1      aa,bb
2      aaa,bbb,ccc
即:group by id, 求 value 的和(字符串相加)
*/
--1、sql2000中只能用自定义的函数解决
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go

create function dbo.f_str(@id varchar(10)) returns varchar(1000)
as
begin
 
declare @str varchar(1000)
 
select @str = isnull(@str + ',' , '') + cast(value as varchar) from tb where id = @id
 
return @str
end
go

--调用函数
select id , value = dbo.f_str(id) from tb group by id

drop function dbo.f_str
drop table tb


--2、sql2005中的方法
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go

select id, [value] = stuff((select ',' + [value] from tb t where id = tb.id for xml path('')) , 1 , 1 , '')
from tb
group by id

drop table tb


--3、使用游标合并数据
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
declare @t table(id int,value varchar(100))--定义结果集表变量
--
定义游标并进行合并处理
declare my_cursor cursor local for
select id , value from tb
declare @id_old int , @id int , @value varchar(10) , @s varchar(100)
open my_cursor
fetch my_cursor into @id , @value
select @id_old = @id , @s=''
while @@FETCH_STATUS = 0
begin
   
if @id = @id_old
      
select @s = @s + ',' + cast(@value as varchar)
   
else
     
begin
       
insert @t values(@id_old , stuff(@s,1,1,''))
       
select @s = ',' + cast(@value as varchar) , @id_old = @id
     
end
   
fetch my_cursor into @id , @value
END
insert @t values(@id_old , stuff(@s,1,1,''))
close my_cursor
deallocate my_cursor

select * from @t
drop table tb

在Element UI的`el-option`组件中,`value`属性通常用于绑定选项的实际值,但是如果你想同时获取`id`和`value`,你可以采用以下策略: 1. 如果`option`对象本身包含了`id`和`value`属性,你可以直接使用对象作为`value`,然后在你需要的时候通过`.property`的形式访问特定字段: ```html <el-option v-for="item in options" :key="item.id" :label="item.label" :value="item" ></el-option> <!-- 使用时 --> <template> <div> ID: {{ item.id }} Value: {{ item.value }} </div> </template> ``` 在这种情况下,每次点击选项,`item`对象就会包含`id`和`value`。 2. 如果`options`数组的每个元素是简单的对象,但你希望它们具有自定义结构(比如一个包含`id`和`value`的嵌套对象),你可以创建一个新的对象,合并这两个字段: ```js data() { return { options: [ { id: '1', value: 'Option 1' }, // ... ], optionWithIdsAndValues: [] } } methods: { prepareOption(option) { return { ...option, idAndValue: { id: option.id, value: option.value } }; } } // 在模板里使用 <el-option v-for="preparedOption in optionWithIdsAndValues" :key="preparedOption.idAndValue.id" :label="preparedOption.label" :value="preparedOption.idAndValue" ></el-option> // 初始化数据 this.optionWithIdsAndValues = this.options.map(this.prepareOption); ``` 在这个例子中,`value`属性绑定的是一个内部对象,`id`和`value`分别可以通过`option.idAndValue.id`和`option.idAndValue.value`访问。 选择哪种方式取决于你的具体需求和数据模型。如果你有更多的疑问,请告诉我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值