當前位置:首頁 » 編程語言 » sql如何合並多條相同的id
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql如何合並多條相同的id

發布時間: 2022-08-27 17:13:45

1. 怎麼用sql語句將一張表中ID相同的行的內容合並在一起

工具/材料:Management Studio。

1、首先在桌面上,點擊「Management Studio」圖標。

2. SQL 將屬於同一個ID下的多行數據合並到一行

selectid,sum(isnull(data1,0))data1,sum(isnull(data2,0))data2from表1groupbyid

sqlserver寫法,其他資料庫略有不同

3. sql語句如何合並相同id下的多行數據在一行 例如:

select id,
max(case when rn = 1 then op end ) op_1,
max(case wehn rn = 1 then result end ) result_1,
max(case when rn = 1 then else end ) else_1,
max(case when rn = 2 then op end ) op_2,
max(case wehn rn = 2 then result end ) result_2,
max(case when rn = 2 then else end ) else_2
from (
select a.*,
row_number() over(partition by id order by else) rn
from a)
group by id;

4. 請教SQL可以把ID相同的兩行數據合並到一起嗎

create Function GetName12(@id char(10))
Returns Nvarchar(2000)
As
Begin
Declare
@S Nvarchar(2000)
Set @S=''
Select @S=@S+','+name from 表1 Where id=@id Order By name
Return (Stuff(@S,1,1,'')) End

--select id, dbo.GetName12( id) as Field from 表1

5. sql查詢結果中有id相同的欄位如何對查詢結果進行操作將id相同的合並為一條數據

也不說你是用的什麼資料庫,sqlserver為例

建表

createtableclass
(classidint,
classnamevarchar(10),
teacheridint)


insertintoclassvalues(1,'一班',1)
insertintoclassvalues(1,'一班',2)
insertintoclassvalues(2,'三班',1)

createtableteacher
(teacheridint,
teachernamevarchar(10))

insertintoteachervalues(1,'zhangsan')
insertintoteachervalues(2,'lisi')

執行

withtbas
(selecta.classid,a.classname,b.teachername
fromclassaleftjointeacherb
ona.teacherid=b.teacherid)
selectclassid,classname,teachername=stuff((select','+=tb.classidandclassname=tb.classnameforxmlpath('')),1,1,'')
fromtb
groupbyclassid,classname

結果截圖

6. sql語句查出多行數據,如何將ID相同的行並成一行,且不相同的欄位合成一個字元串

我個人建議你把邏輯寫在代碼裡面
像這種資料庫操作很好資源的,嚴重影響效率
可以先取出一個list
List<User> resultList = 資料庫返回
Map<String,String> map = new HashMap<String,String>();
for(User user : resultList){
String val ;
if(map.containsKey(user.getID().toString())){
val = map.get(user.getID().toString());
val = val + user.getAnotherItem();
map.remove(user.getID().toString());
}else{
val = user.getAnotherItem();
}

map.put(user.getID().toString(),val);
}
//map裡面的東西就是你要的

7. SQL 如何將一個表中的兩條或多條擁有相同ID的記錄合並為一條

一、創建表:

  • create table stuUnion

    (

    sid int identity primary key,

    cid int,

    id varchar(500)

    )

二、添加數據:

  • insert into stuUnion

    elect 1,'a' union

    select 1,'b' union

    select 2,'c' union

    select 2,'d' union

    select 3,'e' union

    select 3,'f' union

    select 3,'g'

三、用標量函數查詢:

  1. 創建標量函數:

    create function b(@cid int)

    returns varchar(500)

    as

    begin

    declare @s varchar(500)

    select @s=isnull(@s+'','')+rtrim(id)+',' from stuUnion where cid=@cid

    return @s

    end;

  2. 用標量函數查詢:

    select cid,dbo.b(cid) as id from stuUnion group by cid

  3. 用sqlserver的xml:

    select cid,ID=STUFF((select ' '+rtrim(id)+',' from stuUnion where st.cid=cid order by id for XML path('')),1,1,'') from stuUnion st group by cid

8. sql語句,合並多條記錄中的相同欄位。

假如你的表結構如下:
create table tb_test
(
商店id int,
時間id int,
用戶id int,
購買產品id int
)

可以創建如下聚合函數:
create function fn_test(@商店id int,@時間id int,@用戶id int)
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret=''
select @ret=@ret+convert(varchar(100),購買產品id int)+',' from tb_test where 商店id=@商店id and 時間id=@時間id and 用戶id=@用戶id
select @ret=left(@ret,len(@ret)-1)
return(@ret)
end

然後用如下SQL語句進行查詢即可。
(@商店id int,@時間id int,@用戶id int
select 商店id,時間id,用戶id,dbo.fn_test(商店id,時間id,用戶id)as 購買產品id
from tb_test
group by 商店id,時間id,用戶id

還有一種更簡單的辦法,在2005上測試沒有問題,2008上可自己驗證一下:
select
商店id,時間id,用戶id,
stuff((select ','+convert(varchar(10),購買產品id) from tb_test b
where 商店id=a.商店id and 時間id=a.時間id and 用戶id=a.用戶id
for xml path('')),1,1,'')
from tb_test a
group by 商店id,時間id,用戶id