EXCL怎么sql按条件提取数据多条记录,并实现条件自增

在A1单元格输入以下公式,然后向下填充公式
=&.mr&&ROW()&& {margin-right: &&ROW()&&}&
公式中考虑了数字前后的空格
实现效果:
由此看出“需要的字符串”&ROW()&&字符串&
&:起到连接作用;
ROW():当前行数,自增全靠这个函数。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:149535次
积分:3311
积分:3311
排名:第10194名
原创:150篇
转载:220篇
评论:15条
(7)(13)(13)(8)(9)(19)(5)(9)(14)(16)(14)(12)(34)(36)(39)(33)(7)(3)(4)(8)(13)(13)(26)(16)(4)--按某一字段分组取最大(小)值所在行的数据/*数据如下:name&val&memoa&&&&2&&&a2(a的第二个值)a&&&&1&&&a1--a的第一个值a&&&&3&&&a3:a的第三个值b&&&&1&&&b1--b的第一个值b&&&&3&&&b3:b的第三个值b&&&&2&&&b2b2b2b2b&&&&4&&&b4b4b&&&&5&&&b5b5b5b5b5*/--创建表并插入数据:create&table&tb(name&varchar(10),val&int,memo&varchar(20))insert&into&tb&values('a',&&&&2,&&&'a2(a的第二个值)')insert&into&tb&values('a',&&&&1,&&&'a1--a的第一个值')insert&into&tb&values('a',&&&&3,&&&'a3:a的第三个值')insert&into&tb&values('b',&&&&1,&&&'b1--b的第一个值')insert&into&tb&values('b',&&&&3,&&&'b3:b的第三个值')insert&into&tb&values('b',&&&&2,&&&'b2b2b2b2')insert&into&tb&values('b',&&&&4,&&&'b4b4')insert&into&tb&values('b',&&&&5,&&&'b5b5b5b5b5')go--一、按name分组取val最大的值所在行的数据。--方法1:select&a.*&from&tb&a&where&val&=&(select&max(val)&from&tb&where&name&=&a.name)&order&by&a.name--方法2:select&a.*&from&tb&a&where&not&exists(select&1&from&tb&where&name&=&a.name&and&val&&&a.val)--方法3:select&a.*&from&tb&a,(select&name,max(val)&val&from&tb&group&by&name)&b&where&a.name&=&b.name&and&a.val&=&b.val&order&by&a.name--方法4:select&a.*&from&tb&a&inner&join&(select&name&,&max(val)&val&from&tb&group&by&name)&b&on&a.name&=&b.name&and&a.val&=&b.val&order&by&a.name--方法5select&a.*&from&tb&a&where&1&&&(select&count(*)&from&tb&where&name&=&a.name&and&val&&&a.val&)&order&by&a.name/*name&&&&&&&val&&&&&&&&&memo&&&&&&&&&&&&&&&&&----------&-----------&--------------------&a&&&&&&&&&&3&&&&&&&&&&&a3:a的第三个值b&&&&&&&&&&5&&&&&&&&&&&b5b5b5b5b5*/--二、按name分组取val最小的值所在行的数据。--方法1:select&a.*&from&tb&a&where&val&=&(select&min(val)&from&tb&where&name&=&a.name)&order&by&a.name--方法2:select&a.*&from&tb&a&where&not&exists(select&1&from&tb&where&name&=&a.name&and&val&&&a.val)--方法3:select&a.*&from&tb&a,(select&name,min(val)&val&from&tb&group&by&name)&b&where&a.name&=&b.name&and&a.val&=&b.val&order&by&a.name--方法4:select&a.*&from&tb&a&inner&join&(select&name&,&min(val)&val&from&tb&group&by&name)&b&on&a.name&=&b.name&and&a.val&=&b.val&order&by&a.name--方法5select&a.*&from&tb&a&where&1&&&(select&count(*)&from&tb&where&name&=&a.name&and&val&&&a.val)&order&by&a.name/*name&&&&&&&val&&&&&&&&&memo&&&&&&&&&&&&&&&&&----------&-----------&--------------------&a&&&&&&&&&&1&&&&&&&&&&&a1--a的第一个值b&&&&&&&&&&1&&&&&&&&&&&b1--b的第一个值*/--三、按name分组取第一次出现的行所在的数据。select&a.*&from&tb&a&where&val&=&(select&top&1&val&from&tb&where&name&=&a.name)&order&by&a.name/*name&&&&&&&val&&&&&&&&&memo&&&&&&&&&&&&&&&&&----------&-----------&--------------------&a&&&&&&&&&&2&&&&&&&&&&&a2(a的第二个值)b&&&&&&&&&&1&&&&&&&&&&&b1--b的第一个值*/--四、按name分组随机取一条数据。select&a.*&from&tb&a&where&val&=&(select&top&1&val&from&tb&where&name&=&a.name&order&by&newid())&order&by&a.name/*name&&&&&&&val&&&&&&&&&memo&&&&&&&&&&&&&&&&&----------&-----------&--------------------&a&&&&&&&&&&1&&&&&&&&&&&a1--a的第一个值b&&&&&&&&&&5&&&&&&&&&&&b5b5b5b5b5*/--五、按name分组取最小的两个(N个)valselect&a.*&from&tb&a&where&2&&&(select&count(*)&from&tb&where&name&=&a.name&and&val&&&a.val&)&order&by&a.name,a.valselect&a.*&from&tb&a&where&val&in&(select&top&2&val&from&tb&where&name=a.name&order&by&val)&order&by&a.name,a.valselect&a.*&from&tb&a&where&exists&(select&count(*)&from&tb&where&name&=&a.name&and&val&&&a.val&having&Count(*)&&&2)&order&by&a.name/*name&&&&&&&val&&&&&&&&&memo&&&&&&&&&&&&&&&&&----------&-----------&--------------------&a&&&&&&&&&&1&&&&&&&&&&&a1--a的第一个值a&&&&&&&&&&2&&&&&&&&&&&a2(a的第二个值)b&&&&&&&&&&1&&&&&&&&&&&b1--b的第一个值b&&&&&&&&&&2&&&&&&&&&&&b2b2b2b2*/--六、按name分组取最大的两个(N个)valselect&a.*&from&tb&a&where&2&&&(select&count(*)&from&tb&where&name&=&a.name&and&val&&&a.val&)&order&by&a.name,a.valselect&a.*&from&tb&a&where&val&in&(select&top&2&val&from&tb&where&name=a.name&order&by&val&desc)&order&by&a.name,a.valselect&a.*&from&tb&a&where&exists&(select&count(*)&from&tb&where&name&=&a.name&and&val&&&a.val&having&Count(*)&&&2)&order&by&a.name/*name&&&&&&&val&&&&&&&&&memo&&&&&&&&&&&&&&&&&----------&-----------&--------------------&a&&&&&&&&&&2&&&&&&&&&&&a2(a的第二个值)a&&&&&&&&&&3&&&&&&&&&&&a3:a的第三个值b&&&&&&&&&&4&&&&&&&&&&&b4b4b&&&&&&&&&&5&&&&&&&&&&&b5b5b5b5b5*/--七,如果整行数据有重复,所有的列都相同。/*数据如下:name&val&memoa&&&&2&&&a2(a的第二个值)a&&&&1&&&a1--a的第一个值a&&&&1&&&a1--a的第一个值a&&&&3&&&a3:a的第三个值a&&&&3&&&a3:a的第三个值b&&&&1&&&b1--b的第一个值b&&&&3&&&b3:b的第三个值b&&&&2&&&b2b2b2b2b&&&&4&&&b4b4b&&&&5&&&b5b5b5b5b5*/--在sql&server&2000中只能用一个临时表来解决,生成一个自增列,先对val取最大或最小,然后再通过自增列来取数据。--创建表并插入数据:create&table&tb(name&varchar(10),val&int,memo&varchar(20))insert&into&tb&values('a',&&&&2,&&&'a2(a的第二个值)')insert&into&tb&values('a',&&&&1,&&&'a1--a的第一个值')insert&into&tb&values('a',&&&&1,&&&'a1--a的第一个值')insert&into&tb&values('a',&&&&3,&&&'a3:a的第三个值')insert&into&tb&values('a',&&&&3,&&&'a3:a的第三个值')insert&into&tb&values('b',&&&&1,&&&'b1--b的第一个值')insert&into&tb&values('b',&&&&3,&&&'b3:b的第三个值')insert&into&tb&values('b',&&&&2,&&&'b2b2b2b2')insert&into&tb&values('b',&&&&4,&&&'b4b4')insert&into&tb&values('b',&&&&5,&&&'b5b5b5b5b5')goselect&*&,&px&=&identity(int,1,1)&into&tmp&from&tbselect&m.name,m.val,m.memo&from(&&select&t.*&from&tmp&t&where&val&=&(select&min(val)&from&tmp&where&name&=&t.name))&m&where&px&=&(select&min(px)&from(&&select&t.*&from&tmp&t&where&val&=&(select&min(val)&from&tmp&where&name&=&t.name))&n&where&n.name&=&m.name)drop&table&tb,tmp/*name&&&&&&&val&&&&&&&&&memo----------&-----------&--------------------a&&&&&&&&&&1&&&&&&&&&&&a1--a的第一个值b&&&&&&&&&&1&&&&&&&&&&&b1--b的第一个值(2&行受影响)*/--在sql&server&2005中可以使用row_number函数,不需要使用临时表。--创建表并插入数据:create&table&tb(name&varchar(10),val&int,memo&varchar(20))insert&into&tb&values('a',&&&&2,&&&'a2(a的第二个值)')insert&into&tb&values('a',&&&&1,&&&'a1--a的第一个值')insert&into&tb&values('a',&&&&1,&&&'a1--a的第一个值')insert&into&tb&values('a',&&&&3,&&&'a3:a的第三个值')insert&into&tb&values('a',&&&&3,&&&'a3:a的第三个值')insert&into&tb&values('b',&&&&1,&&&'b1--b的第一个值')insert&into&tb&values('b',&&&&3,&&&'b3:b的第三个值')insert&into&tb&values('b',&&&&2,&&&'b2b2b2b2')insert&into&tb&values('b',&&&&4,&&&'b4b4')insert&into&tb&values('b',&&&&5,&&&'b5b5b5b5b5')goselect&m.name,m.val,m.memo&from(&&select&*&,&px&=&row_number()&over(order&by&name&,&val)&from&tb)&m&where&px&=&(select&min(px)&from(&&select&*&,&px&=&row_number()&over(order&by&name&,&val)&from&tb)&n&where&n.name&=&m.name)drop&table&tb/*name&&&&&&&val&&&&&&&&&memo----------&-----------&--------------------a&&&&&&&&&&1&&&&&&&&&&&a1--a的第一个值b&&&&&&&&&&1&&&&&&&&&&&b1--b的第一个值(2&行受影响)*/
按按Rdate分组取num最小的值所在行的数据。并根据主从表ID左关联取主表的所有字段。。。。
select a.*,b.* from child a left join parent as b on b.id=a.PID where num = (select min(num) from child where Rdate = a.Rdate)
//三表联合查询.....
select info.PriceStartDate, Res_Golf.* from Res_Golf left join ( select Erp_GolfID,max(PriceStartDate) as PriceStartDate from Res_GolfInfo left join (select Erp_GolfInfoID,PriceStartDate from Res_GolfPrice where PriceStartDate & ''& group by Erp_GolfInfoID,PriceStartDate ) as pri on Res_GolfInfo.GolfInfoID=pri.Erp_GolfInfoID&& group by Erp_GolfID) as info on Res_Golf.Erp_GolfID=info.Erp_GolfID
select a.Erp_GolfID, MAX(b.PriceStartDate) from Res_Golf a inner join (select a.Erp_GolfID,b.PriceStartDate from Res_GolfInfo a inner join Res_GolfPrice b on a.GolfInfoID=b.Erp_GolfInfoID group by a.Erp_GolfID,b.PriceStartDate) b on a.Erp_GolfID=b.Erp_GolfID& group by a.Erp_GolfIDExcel如何将两个表,根据有相同数据的一列数据,自动填写到另外一张表? - 知乎81被浏览26986分享邀请回答1713 条评论分享收藏感谢收起4添加评论分享收藏感谢收起查看更多回答

我要回帖

更多关于 matlab 按条件提取 的文章

 

随机推荐