难,高手请进来指导,菜鸟进来学习!100分

atlcat 2005-03-18 09:34:51
表:
编号 大类 小类 型号 数量 单价 单位
0001 有价卡 充值卡 50元 300 1.25 伟达
0002 有价卡 充值卡 100元 80 1.5 伟达
0002 有价卡 充值卡 100元 300 1.5 通大
0002 有价卡 充值卡 100元 100 1.5 通大
0001 有价卡 充值卡 50元 100 1.25 通大
要得到的结果:
单位 数量1 单价1 数量2 单价2
通大 100 1.25 400 1.5
伟达 300 1.25 80 1.5

其中编号和单位字段数量不定,也就是说,查出来的结果行和列都是根据实际情况变化的
...全文
215 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wumylove1234 2005-03-19
  • 打赏
  • 举报
回复
我的妈亲呢!
不管邹大侠的对否,他的这种方法我是从未见过的!!!!!!!
太让我感慨了~我还感觉自已SQL学的够可以的了,差太多了,无地自容!
zjcxc 元老 2005-03-19
  • 打赏
  • 举报
回复
晕,你直接说明不就行了么,绕这么大圈子干嘛?

你自己测试了数据,帖出了结果,我没发现生成的结果有错,你发现有错就指明
atlcat 2005-03-19
  • 打赏
  • 举报
回复
你把数据变为我的样子看看就知道了
zjcxc 元老 2005-03-19
  • 打赏
  • 举报
回复
我的结果没错啊,错在那了?
lishengyu 2005-03-19
  • 打赏
  • 举报
回复
create table tb(编号 char(4),大类 varchar(10),小类 varchar(10),型号 varchar(10),数量 int,单价 decimal(10,2),单位 varchar(10))
insert tb select '0001','有价卡','充值卡','50元' ,300,1.25,'伟达'
union all select '0002','有价卡','充值卡','100元',80 ,1.5 ,'伟达'
union all select '0002','有价卡','充值卡','100元',300,1.5 ,'通大'
union all select '0002','有价卡','充值卡','100元',100,1.5 ,'通大'
union all select '0001','有价卡','充值卡','50元' ,100,1.25,'通大'
go

--查询处理
declare @s varchar(8000),@i as int
set @s=''
set @i=0
select
@i=@i+1,

@s=@s+','+cast(单价 as varchar)+' 单价'+cast(@i as varchar)+', sum (case when 单价='
+cast(单价 as varchar)+ ' then 数量 end) 数量' + cast (@i as varchar)

from tb group by 单价
set @s='select 单位 '+@s+' from tb group by 单位'
exec (@s)
--删除测试
drop table tb

单位 单价1 数量1 单价2 数量2
---------- ----- ----------- ----- -----------
通大 1.25 100 1.50 400
伟达 1.25 300 1.50 80
atlcat 2005-03-18
  • 打赏
  • 举报
回复
我自己的方法,只能得到这个样子,如下:请指教:
declare @sql varchar(8000)
declare @s varchar(8000)
declare @s1 varchar(8000)
set @sql=''
set @sql='select 单位'
select @sql=@sql+',['+编号+']=(case 编号 when '''+编号+''' then 数量 else 0 end)'
from (select distinct 编号 from tradesman_view) a
set @sql=@sql+'from tb'
set @s='select 单位'
select @s=@s+',sum(['+编号+']) as ['+编号+']'
from (select distinct 编号 from tb) a
set @s=@s+'from ('+@sql+')b group by 单位'
exec(@s)
结果:
单位 0001 0002 0004
天音 0 0 100
通大 100 400 0
伟达 300 80 200

atlcat 2005-03-18
  • 打赏
  • 举报
回复
高人,当我的数据变为:
编号 大类 小类 型号 数量 单价 名称
0001 有价卡 充值卡 50元 300 1.25 伟达
0002 有价卡 充值卡 100元 80 1.5 伟达
0002 有价卡 充值卡 100元 100 1.5 通大
0001 有价卡 充值卡 50元 100 1.25 通大
0002 有价卡 充值卡 100元 300 1.5 通大
0004 有价卡 天府卡 100元 200 1.75 伟达
0004 有价卡 天府卡 100元 100 1.75 天音
后,用您的方法好象有点问题:
结果如下:
名称 数量1 单价1 数量2 单价2 数量3 单价3
天音 100 1.75 0 0.0 0 0.0
通大 100 1.25 400 1.5 0 0.0
伟达 300 1.25 80 1.5 200 1.75
atlcat 2005-03-18
  • 打赏
  • 举报
回复
邹兄,I服了U!!
我研究研究先
zjcxc 元老 2005-03-18
  • 打赏
  • 举报
回复
--测试数据

create table tb(编号 char(4),大类 varchar(10),小类 varchar(10),型号 varchar(10),数量 int,单价 decimal(10,2),单位 varchar(10))
insert tb select '0001','有价卡','充值卡','50元' ,300,1.25,'伟达'
union all select '0002','有价卡','充值卡','100元',80 ,1.5 ,'伟达'
union all select '0002','有价卡','充值卡','100元',300,1.5 ,'通大'
union all select '0002','有价卡','充值卡','100元',100,1.5 ,'通大'
union all select '0001','有价卡','充值卡','50元' ,100,1.25,'通大'
go

--查询处理
declare @s nvarchar(4000),@i varchar(10)
select @s='',@i=max(cnt)
from(select 单位,cnt=count(distinct 编号) from tb group by 单位)a
while @i>0
select @s=',数量'+@i+'=isnull(sum(case id when '+@i+' then 数量 end),0)'
+',单价'+@i+'=isnull(max(case id when '+@i+' then 单价 end),0)'
+@s
,@i=@i-1
exec('select 单位'+@s+'
from(
select 单位,数量,单价,id=(select count(distinct 编号) from tb where 单位=aa.单位 and 编号<=aa.编号)
from tb aa
)a group by 单位')
go

--删除测试
drop table tb

/*--结果

单位 数量1 单价1 数量2 单价2
---------- ----------- ------------ ----------- ------------
通大 100 1.25 400 1.50
伟达 300 1.25 80 1.50
--*/
更多项目进度详情享:智能小车开源项目文章汇总 我们为什么要做这件事? 困境:“跪求指点”的菜鸟一年比一年多,有空搭理菜鸟的大神一年比一年少。 原因:很多时候不是大神不肯帮忙,而是各种零散、离奇、重复的问题,浇灭了他们“扶弱济贫”的心。 对策:电路城团队深谙两方的急迫和苦衷,作为一个技术交流平台应有的责任,于是有了《来实战》的栏目构想,即每期选定一个富有启发性和趣味性的开源项目,由硬件设计大神带队,引领一批自愿报名加入的同道爱好者,从项目析、思路梳理开始,逐步完成动手实践、项目调试,直到最后的完美再现和更进一步的功能升级。我们期望,今天的新手菜鸟,能用自己的勤勉好学,得到大神更多的关注和指导,更快加入硬件高手的行列;我们也期望,受益于这个项目的人们,也将更愿意帮助那些陷入迷茫的曾经的自己。 支持:电路城的美国兄弟工程师交流平台hackaday(www.hackaday.com)和摩尔吧视频平台(https://www.moore8.com/)... 关于开源项目,我们计划这样来操作: 1.对标摩尔吧中的中相关主题智能小车项目(基于恩智浦平台智能汽车),我们这次用基于意法半导体的STM32平台来打造多功能智能小车,最终实物性能如何?基于意法半导体平台的智能小车PK恩智浦智能小车,谁更胜一筹?电路城开源项目组现在开始就通过逐步实操并最终打造出来,最后实物演示操作对比。此外,我们将预留资源,增加创意点的功能:红外或者超声波避障、摄像头、激光测距、舵机等等(到时根据实际进度会有一定取舍调整)。 2.项目更新进度:每两天在《来实战》栏目上更新设计进度内容,在工程没有实质性进度的时候也可以在论坛发帖享进行实施困点、设计技术点和原理讲解及器件析等。 3.建立对应项目讨论群。利用现有已建立的技术Q群资源,我们在做每一个不同主题方向的项目时,为方便讨论同时活跃Q群用户,欢迎更多志同道合的小伙伴加进来参加开源项目讨论或给我们提供建议。 4.采购设计工具 工具:电焊台(刀头、尖头)、焊锡丝、吸锡器、助焊膏、烙铁架子带夹子、松香、热熔胶枪、螺丝刀、万用表、剪钳、镊子、钳子、海绵、美工刀、元器件收纳盒、手持钻孔机等等,以后可以慢慢完善。示波器以及信号源、多功能电源。 元器件及材料:采购电子元器件以及打板。 5.我们会定期举办开源项目直播交流,或制作一些项目设计过程中的小视频,在项目交流群中与大家享,感兴趣的小伙伴马上加入我们吧。 6.建立开源项目贡献者名单荣誉榜,不定期在本开源项目页面更新。项目结束后,对该开源项目贡献突出的小伙伴,我们评选出“开源之星”给予神秘大奖奖励。开源项目贡献者名单会被注明在最终的开源项目方案中。 7.期待更多的志同道合的技术大咖加入我们“开源项目智囊团”,出谋划策,为开源贡献自己应有的力量。 8.这是一个开源项目,项目最终会被享上传到“电路城-电路方案”频道,供大家免费下载。 智能小车开源项目开发周期 计划2020.3.5~2020.4.30内完成。 项目主要有以下几个阶段(每个阶段我们还会就开发过程中遇到的一些有价值的开发点或经验教训,以直播的形式在摩尔吧开播,具体主题和时间后期持续更新,感兴趣的小伙伴可以关注下哈~): 第一阶段:设计的要求及技术指标 -硬件系统(确定硬件设计思路,出总体框图,完成主要器件选型及相关资料查找); -软件系统(确定程序流程框图,查看相关示例程序,一般传感器、相关模块会给示例程序); -设计方案介绍(整体设计方案的介绍,以及相关方案的对比); -工作原理介绍及说明(介绍功能参数、方案原理、相关科普); 第二阶段:硬件系统设计 -硬件系统各模块功能介绍(所用到的功能模块、传感器、少见器件学习以及出文章介绍); -原理图、PCB图或仿真图绘制(完成原理图设计,需制作实物还需进行PCB设计); -元器件选型与BOM表(跟据原理图设计同步确定元器件选型,给出具体BOM表); 第三阶段:软件系统设计 -使用单片机资源情况(单片使用资源介绍,完成一些基础的讲解,还有相关芯片器件); -软件系统各模块功能介绍(各功能模块程序设计流程图,程序实现原理); -程序编写及清单(进行总的程序编写,以及初步调试); 第四阶段:实物制作 -焊接(待元器件集齐,打板完成,进行焊接以及相关结构制作,模型安装等); -软件调试; -硬件调试(结合软硬件调试,完成程序修改,确保功能实现,验证硬件部没有问题); -设计结果析(测试功能、验证相关参数,有什么不足以及改正,对做的不好的地方留时间补救); -测试过程(完整测试的发表,实测); 第五阶段:项目总结 -完成知识总结等收尾工作; -整理打包完整的开源方案所有资料; -开源项目突出贡献者名单公布及颁发奖品。

34,871

社区成员

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

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