现在有一个需求 我们有一张表employee EmpID EmpName ---------- ------------- 张山 张大山 张小山 李菲菲 李晓梅 Result I need in this format: EmpID EmpName ---------- ------------- 张山, 张大山, 张小山 李菲菲, 李晓梅 如果使用MySQL,可以很简单的实现 selecet group_concat(empname) from employee group by empid;
从SQLSERVER/MYSQL数据库中随机取一条或者N条记录 很多人都知道使用rand()函数但是怎麽使用可能不是每个人都知道 建立测试表 USE [sss] GO ,NAME ) DEFAULT 'nihao') GO CREATE INDEX IX_RANDTEST_ID ON RANDTEST(ID) GO INSERT INTO RANDTEST DEFAULT VALUES SELECT * FROM RANDTEST 第一种写法:大家会想到ORDER BY NEWID() SET
1.多行转一行 多行转一行可以通过concat_ws(',',collect_set(col_name)) as col_new的方式实现,可以参考:https://www.cnblogs.com/shujuxiong/p/9564556.html select id , concat_ws(',',collect_set(col_name)) as col_new from table_name group by id ; 2.一行转多行 一行转多行通过把原字段中的多个值拆分并转成多条记录的方
注意 :|,: 是特殊符号,要用 "\\|", "\\;"来表示. 一行转多行 usertags 里面有很多项,每项之间以逗号分隔 create table tag_count2 as select tag,count(gid) from ( select gid,tag from (select b.gid ,b.usertags from zhangb.gid_tags b group by b.gid,b.usertags) a lateral v
sql 例子: SELECT STUFF((SELECT ',' + CONVERT(VARCHAR, b.SCsinfoSourceId) FROM PZDataCsinfo b WHERE b.DId = a.PFId FOR XML PATH ('')), 1, 1, '') AS cids, *FROM PZFocusImg a WHERE a.PFId=120 注解: 1.STUFF ( character_expression , start , length ,character_
MySql行转列 以id分组,把name字段的值打印在一行,逗号分隔(默认) select CustomerDrugCode,group_concat(AuditItemName) from noaudit_drug group by CustomerDrugCode; 以id分组,把name字段的值打印在一行,分号分隔 select CustomerDrugCode,group_concat(AuditItemName separator ';') from noaudit_drug grou
sql多行合并成一行 sql server SELECT [activityId], --STUFF( (SELECT ',' + Cast(A.phone AS varchar) FROM aaa A WHERE A.activityId=B.activityId FOR XML PATH('')) --,1,1,'') AS phonesFROM aaa BGROUP BY [activityId] mysql SELECTactivityId, group_concat(DISTINCT
数据库结构如图: 而我想让同一个人的不同成绩变成此人在这一行不同列上显示出来,此时分为2中展现: 第一种展现如图----[多行变一列](合并后的数据在同一列上): sql如下: select name ,group_concat(sore Separator ';') as score from stu group by name 第二种展现如图----[多行变多列](合并后的数据在不同列上): sql如下: SELECT name , MAX(CASE type WHEN '数学' THEN
不同数据库限制返回的行数的关键字如下: ①db2 select * from table fetch first 10 rows only; ②oracle select * from table where rownum<=10; ③mysql select * from table limit 10; ④sqlServer select top 10 * from table;
drop table #testcreate table #test( id int identity(1,1) primary key, bizDate varchar(50), type varchar(50), qty float) insert into #testselect '20110501','A',20.5 union allselect '20110501','B',98 union allselect '20110501','C',100.5 uni
有两个导数据的需求,1.一张表里面每一个订单号可能对应多条数据,每个单号返回时间最早的那条. 2.根据条件查询某个字段并按照逗号,合并在一起. 表类似结构如下: 第一条sql:select c.Id,c.OrderNum, c.CreateTime FROM (select t.*,row_number() over(partition by t.OrderNum order by t.CreateTime ) rn from Payinfo t WHERE t.OrderNum IN('20