用一个SELECT 实现

DavidNoWay 2007-05-15 02:52:11
例如t1为:
a b
qwe 1
dsfg 2
小计1 18
ger 19
kuyre 20
we34 23
小计2 25
db 26
tyuq 29
小计3 35
能不能用一条SELECT语句实现
---
a b c
qwe 1 18
dsfg 2 18
小计1 18 18
ger 19 25
kuyre 20 25
we34 23 25
小计2 25 25
db 26 35
tyuq 29 35
小计3 35 35
其中b为升序排列

...全文
5269 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
DavidNoWay 2007-05-16
  • 打赏
  • 举报
回复
呵呵,谢谢大家!!
smile9961 2007-05-15
  • 打赏
  • 举报
回复
牛人真多...
wgzaaa 2007-05-15
  • 打赏
  • 举报
回复
select C.*,(select top 1 b from tb1 A where A.a like '%计%' and A.b-C.b>=0 ) C from tb1 C order by C.b
测试通过
smile9961 2007-05-15
  • 打赏
  • 举报
回复
佩服lwl0606(寒泉), 看來我需要學習的是高手思維方式……
-狙击手- 2007-05-15
  • 打赏
  • 举报
回复
create table one(
id int identity(1,1),
a nvarchar(10),
b int
)
go
insert into one
select 'qwe', 1 union all
select 'dsfg ', 2 union all
select N'小计1', 18 union all
select 'ger', 19 union all
select 'kuyre', 20 union all
select 'we34', 23 union all
select N'小计2', 25 union all
select 'db', 26 union all
select 'tyuq', 29 union all
select N'小计3', 35
go
-- select id from one where left(a,2) = '小计'
declare dd cursor for select id,b from one where left(a,2) = '小计'
declare @b int
declare @i int
declare @ii int
set @i = 0
set @ii =0
declare @sql varchar(8000)
set @sql = ''
open dd
FETCH NEXT FROM dd into @i,@b
WHILE @@FETCH_STATUS = 0
BEGIN

set @sql = @sql+ 'union all select a,b,'+cast(@b as char(2)) + ' as c from one where id <= ' + cast(@i as char(2)) + ' and id > '+ cast(@ii as char(2))
set @ii = @i
FETCH NEXT FROM dd into @i,@b
END
set @sql = right(@sql, len(@sql) - 9)

exec(@sql)

CLOSE dd
DEALLOCATE dd

drop table one

/*


a b c
---------- ----------- -----------
qwe 1 18
dsfg 2 18
小计1 18 18
ger 19 25
kuyre 20 25
we34 23 25
小计2 25 25
db 26 35
tyuq 29 35
小计3 35 35


*/
lwl0606 2007-05-15
  • 打赏
  • 举报
回复
看看这个,借助楼上兄弟创建的表one


SELECT A,B,MIN(C) AS C
FROM (
select one.a,one.b,(case when one.b<= tem.b then tem.c end) as c from one ,(
select a,b,(case when a like N'小计%' then b end ) as c
from one) tem
) BB
WHERE C IS NOT NULL
GROUP BY A,B


--结果
qwe 1 18
dsfg 2 18
小计1 18 18
ger 19 25
kuyre 20 25
we34 23 25
小计2 25 25
db 26 35
tyuq 29 35
小计3 35 35
DavidNoWay 2007-05-15
  • 打赏
  • 举报
回复
好像
DavidNoWay 2007-05-15
  • 打赏
  • 举报
回复
在小计1之前的都是值18,在小计2之前,小计1之后的值都是25
而且t1表是动态的,每次小计1、2、3的B值有可能不一样。
不过都是按B的值升序排列的。
感觉有点难度。O_0好你越说越乱了
smile9961 2007-05-15
  • 打赏
  • 举报
回复
create table dbo.one
(
id int identity(1,1),
a nvarchar(10),
b int
)

insert into one
select 'qwe', 1 union all
select 'dsfg ', 2 union all
select N'小计1', 18 union all
select 'ger', 19 union all
select 'kuyre', 20 union all
select 'we34', 23 union all
select N'小计2', 25 union all
select 'db', 26 union all
select 'tyuq', 29 union all
select N'小计3', 35

select y.oid as yid, x.oid as xid, x.b
from
(
select min(id) as oid, convert(int, replace(a, N'小计', '')) as id, min(b) as b
from one group by a having substring(a, 1,2) = N'小计'
) x
inner join
(
select min(id) as oid, convert(int, replace(a, N'小计', '')) as id, min(b) as b
from one group by a having substring(a, 1,2) = N'小计'
) y
on x.id = y.id + 1

union all

select 1 as oid, oid as id, b
from
(
select top 1 min(id) as oid, min(b) as b
from one group by a having substring(a, 1,2) = N'小计'
) z

drop table one

--结果
yid xid b
----------- ----------- -----------
3 7 25
7 10 35
1 3 18

哪位再处理一下?
wuya8115 2007-05-15
  • 打赏
  • 举报
回复
得到的C这一列是干什么用的?怎么没有看懂你要干什么啊?
ojuju10 2007-05-15
  • 打赏
  • 举报
回复
把你的查询语句帖出来!
在查询字段里加(select sum(num) from table where a.b=b and a.a=a ) as c
yhtapmys 2007-05-15
  • 打赏
  • 举报
回复
动态sql
toddzst 2007-05-15
  • 打赏
  • 举报
回复
bu
本季课程把开发知识拆解到项目里,让你在项目情境里学知识。这样的学习方式能让你保持兴趣、充满动力,时刻知道学的东西能用在哪、能怎么用。平时不明白的知识点,放在项目里去理解就恍然大悟了。  一、融汇贯通本视频采用了前后端分离的开发模式,前端使用Vue.js+Element UI实现了Web页面的呈现,后端使用Python 的Django REST Framework框架实现了数据访问的接口,前端通过Axios访问后端接口获得数据。在学习完本章节后,真正理解前后端的各自承担的工作。 二、贴近实战本课程为学生信息管理系统课程:Vue3 + Vite + ElementPlus + Django REST Framework项目实战 本季课程主学生信息管理系统V5.0,内容包含:Django REST framework安装和项目初始化、数据的序列化、ViewSet视图集、DefaultRouter路由类、django-filter实现过滤、rest framework实现查找、rest framework实现分页、npm的使用、使用Vite构建vue3项目、Package.json解析、ElementPlus安装和应用、vue-router实现路由、使用Vuex的store对象、后台管理系统主界面的布局、axios组件的安装和请求、axios请求的模块化、请求拦截器和响应拦截器、使用el-select实现联级下拉、使用cascader实现联级选择、vue表单的验证、实现学生信息的添加、修改和删除、实现文件的上传等等功能 本案例完整的演示了项目实现过程,虽然不复杂,但涉及的内容非常多,特别是前后端交互的时候,有诸多的坑等着你去踩,好在王老师全程代码呈现,带着大家一起填坑,大大提高学习效率的同时,也培养了大家良好的代码习惯,希望大家一起跟着王进老师学习Python开发。三、后续课程预告:Vue和Django REST Framework实现JWT登录认证 

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧