请问这个sql怎么写,好像蛮难的

michael_monkey 2005-12-27 08:30:03
有一表:
编号 单位 数量
1 一队 100
2 二队 200
3 三队 300
4 四队 400
5 一队 500
6 一队 600
7 一队 700
8 二队 800
9 四队 900

要查询出这个样子:
编号 一队 二队 三队 四对
1 100
2 200
3 300
4 400
5 500
6 600
7 700
8 800
9 900

...全文
348 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyezi001 2005-12-29
  • 打赏
  • 举报
回复
aa
淡蓝冰 2005-12-28
  • 打赏
  • 举报
回复
不錯
zhang_yzy 2005-12-28
  • 打赏
  • 举报
回复
TRANSFORM Sum(表1.数量) AS 数量之Sum
SELECT 表1.编号
FROM 表1
GROUP BY 表1.编号
PIVOT 表1.单位;

这个是在ACCESS中的语句
wushimiang12 2005-12-28
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql='select 编号'
select @sql=@sql+',['+单位+']=isnull(sum(case when 单位='''+单位+''' then 数量 end),0)'
from tab
group by 单位
print @sql
select @sql=@sql+' from tab group by 编号'
print @sql

exec(@sql)

drop table tab

在Access中要注意引号就可以了
zhang_yzy 2005-12-28
  • 打赏
  • 举报
回复
用动态的SQL吧
---------------------------
另外,在ACCESS中做这个很容易呀,他有专门的汇总查询设计器呀,
象这种查询很容易生成的
luckystone168 2005-12-28
  • 打赏
  • 举报
回复
这不就是交叉表吗?ACCESS有向导可以做呀
junhao_666 2005-12-28
  • 打赏
  • 举报
回复
动态的sql
真的不错!
LGame 2005-12-28
  • 打赏
  • 举报
回复
好东西
xiaoxiangqing 2005-12-28
  • 打赏
  • 举报
回复
if exists (select * from sysobjects where object_id('tableA')=id and objectproperty(id,'isUserTable')=1)
drop table tableA

go

create table tableA(编号 int,单位 varchar(10),数量 int)
go

---------增加数据---------
insert tableA
select 1,'一队',100 union all
select 2,'二队',200 union all
select 3,'三队',300 union all
select 4,'四队',400 union all
select 5,'一队',500 union all
select 6,'一队',600 union all
select 7,'一队',700 union all
select 8,'二队',800 union all
select 9,'四队',900 union all
select 10,'五队',1000
go

select * from tableA
/*
编号 单位 数量
1 一队 100
2 二队 200
3 三队 300
4 四队 400
5 一队 500
6 一队 600
7 一队 700
8 二队 800
9 四队 900
10 五队 1000
*/

declare @sql varchar(8000)
set @sql=''
select @sql=@sql+'case when 单位='''+单位+''' then 数量 end '''+单位+''',' from
(
select top 100 min(编号) bh,单位 from tableA group by 单位 order by 1
)a
set @sql='select 编号,'+left(@sql,len(@sql)-1)+' from tableA'

exec(@sql)
/*

编号 一队 二队 三队 四队 五队
1 100 NULL NULL NULL NULL
2 NULL 200 NULL NULL NULL
3 NULL NULL 300 NULL NULL
4 NULL NULL NULL 400 NULL
5 500 NULL NULL NULL NULL
6 600 NULL NULL NULL NULL
7 700 NULL NULL NULL NULL
8 NULL 800 NULL NULL NULL
9 NULL NULL NULL 900 NULL
10 NULL NULL NULL NULL 1000
*/
wjjdnajj 2005-12-28
  • 打赏
  • 举报
回复
顶之
18687874 2005-12-28
  • 打赏
  • 举报
回复
强人,非一般的强人啊
casting 2005-12-28
  • 打赏
  • 举报
回复
请教一下,我学习上面的语句,唯一的区别是单位那个字段 我是用的INT就会报错,请教各位大大,问题在哪里?应该怎么修改
提示为:
将 varchar 值 ']=isnull(convert(varchar(20),sum(case when 单位='' 转换为数据类型为 int 的列时发生语法错误。
michael_monkey 2005-12-28
  • 打赏
  • 举报
回复
zhang_yzy(六子儿)

经典,您是朗个知道的呀,哈哈,真实学海无涯呀
hpym365 2005-12-27
  • 打赏
  • 举报
回复
bh 1队 2队 3队 4队
1 100
2 200
3 300
4 400
5 500
6 600
7 700
8 800
9 900
hpym365 2005-12-27
  • 打赏
  • 举报
回复
declare @s nvarchar(4000)
set @s = ''
select @s=@s+',['+dw+']= isnull(convert(varchar(10),sum(case dw when '''+dw+''' then qty end)),'''')' from ddd group by dw order by dw
set @s=stuff(@s,1,1,'select bh,')+' from ddd group by bh'
print @s
exec (@s)
go
hpym365 2005-12-27
  • 打赏
  • 举报
回复
create table ddd
(bh int,
dw nvarchar(5),
qty int )
insert ddd
select 1,'1队',100 union all
select 2,'2队',200 union all
select 3,'3队',300 union all
select 4,'4队',400 union all
select 5,'1队',500 union all
select 6,'1队',600 union all
select 7,'1队',700 union all
select 8,'2队',800 union all
select 9,'4队',900
go
declare @s nvarchar(4000)
set @s = ''
select @s=@s+',['+dw+']= sum(case dw when '''+dw+''' then qty else 0 end)' from ddd group by dw order by dw
set @s=stuff(@s,1,1,'select bh,')+' from ddd group by bh'
print @s
exec (@s)
go
点点星灯 2005-12-27
  • 打赏
  • 举报
回复


create table tab(编号 int,单位 varchar(20),数量 int)

insert tab values(1,'一队',100)
insert tab values(2,'二队',200)
insert tab values(3,'三队',300)
insert tab values(4,'四队',400)
insert tab values(5,'一队',500)
insert tab values(6,'一队',600)
insert tab values(7,'一队',700)
insert tab values(8,'二队',800)
insert tab values(9,'四队',900)
insert tab values(10,'五队',900)
insert tab values(11,'六队',900)
insert tab values(12,'六队',900)

--查看结果
declare @sql varchar(8000)
set @sql='select 编号'
select @sql=@sql+',['+单位+']=isnull(convert(varchar(20),sum(case when 单位='''+单位+''' then 数量 end),0),'''')'
from tab
group by 单位
print @sql
select @sql=@sql+' from tab group by 编号'
print @sql

exec(@sql)

drop table tab
michael_monkey 2005-12-27
  • 打赏
  • 举报
回复
wonderful!!!!

剩下的工作就是将他移植到access中了,不知道行不行,谢谢

tks a lot
点点星灯 2005-12-27
  • 打赏
  • 举报
回复


create table tab(编号 int,单位 varchar(20),数量 int)

insert tab values(1,'一队',100)
insert tab values(2,'二队',200)
insert tab values(3,'三队',300)
insert tab values(4,'四队',400)
insert tab values(5,'一队',500)
insert tab values(6,'一队',600)
insert tab values(7,'一队',700)
insert tab values(8,'二队',800)
insert tab values(9,'四队',900)
insert tab values(9,'5队',900)


--查看结果
declare @sql varchar(8000)
set @sql='select 编号'
select @sql=@sql+',['+单位+']=isnull(sum(case when 单位='''+单位+''' then 数量 end),0)'
from tab
group by 单位
print @sql
select @sql=@sql+' from tab group by 编号'
print @sql

exec(@sql)

drop table tab

--可以随意添加
hpym365 2005-12-27
  • 打赏
  • 举报
回复
select bh,
一队=(case dw when '一队' then qty else '' end),
二队=(case dw when '二队' then qty else '' end),
三队=(case dw when '三队' then qty else '' end),
四队=(case dw when '四队' then qty else '' end)
from ddd
加载更多回复(6)

34,588

社区成员

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

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