请教SQL写法

rongxh 2004-10-23 08:56:02
原始数据:
TABLE1:
COL1
A
B
C
TABLE2
COL1 COL2 COL3
1 A 50
4 A 20
3 C 50
4 B 75
2 B 30
1 A 20

结果:
COL1 1 2 3 4
A 70 20
B 30 75
C 50
...全文
121 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
风河 2004-10-23
  • 打赏
  • 举报
回复
像写创建数据库与表时,按关键字及逗号进行换行,看起来很工整,以后在进行查看时方便,易懂!

-------------------------------------------------------
--
-- XXX数据库(对数据库进行说明)
--
-------------------------------------------------------
use master
go


if exists(select * from sysdatabases where name ='MyDB')
drop database MyDB
create database MyDB ON
(NAME='MyDB',
FILENAME ='C:\MSSQL\DATA\MyDB.MDF',
SIZE=5MB,
MAXSIZE=50MB)
LOG ON
(NAME='MyDB_LOG',
FILENAME ='C:\MSSQL\DATA\MyDB_LOG.lDF',
SIZE=5MB,
MAXSIZE=25MB)

同样的,写其它也一样的,必要时加点注释,对于数据库维护是很有好处的.
现在的软件很多在进行软件维护时都有可能会修改数据库表,所以加注释是有必要的.



如果你写的是SQL语句集合,如存储过程等.按写一般C代码那样进行缩进!

如果有列表,则上面一行写列名,第一行写不下可错位换行写列名.然后用"----------'这个来分隔列名与数据行.

yasusi 2004-10-23
  • 打赏
  • 举报
回复
真羡慕,,,!!!
zjcxc 元老 2004-10-23
  • 打赏
  • 举报
回复
--如果 b.COL1 的值不固定,则用动态SQL

declare @s varchar(8000)
set @s=''
select @s=@s+',['+cast(COL1 as varchar)+']=max(case b.COL1 when '+cast(COL1 as varchar)+' then cast(b.COL3 as varchar(10)) else '''' end)'
from TABLE2 group by COL1
exec('select a.COL1'+@s+'
from TABLE1 a
left join TABLE2 b on a.COL1=b.COL2
group by a.COL1')
heibai520 2004-10-23
  • 打赏
  • 举报
回复

create table table2(COL1 char(2),COL2 char(1),COL3 int)
insert into table2 select
'1','A',50 union all select
'4', 'A', 20 union all select
'3' , 'C', 50 union all select
'4' ,'B' , 75 union all select
'2' ,'B', 30 union all select
'1' , 'A' ,20


select a.COL2 as COL0,a.COL1,sum(a.COL3) as COL3 into #temp from table2 a
group by a.COL2,a.COL1
select * from #temp


select COL0 as COL2,
sum(case COL1 when '1' then COL3 else null end) as '1',
sum(case COL1 when '2' then COL3 else null end) as '2',
sum(case COL1 when '3' then COL3 else null end) as '3',
sum(case COL1 when '4' then COL3 else null end) as '4'
from #temp
group by COL0
drop table table2
drop table #temp


COL2 1 2 3 4
---- ----------- ----------- ----------- -----------
A 70 NULL NULL 20
B NULL 30 NULL 75
C NULL NULL 50 NULL

(所影响的行数为 3 行)

警告: 聚合或其它 SET 操作消除了空值。
zjcxc 元老 2004-10-23
  • 打赏
  • 举报
回复
--示例

--示例数据
create table TABLE1(COL1 varchar(10))
insert TABLE1 select 'A'
union all select 'B'
union all select 'C'

create table TABLE2(COL1 int,COL2 varchar(10),COL3 int)
insert TABLE2 select 1,'A',50
union all select 4,'A',20
union all select 3,'C',50
union all select 4,'B',75
union all select 2,'B',30
union all select 1,'A',20
go

--查询
select a.COL1
,[1]=max(case b.COL1 when 1 then cast(b.COL3 as varchar(10)) else '' end)
,[2]=max(case b.COL1 when 2 then cast(b.COL3 as varchar(10)) else '' end)
,[3]=max(case b.COL1 when 3 then cast(b.COL3 as varchar(10)) else '' end)
,[4]=max(case b.COL1 when 4 then cast(b.COL3 as varchar(10)) else '' end)
from TABLE1 a
left join TABLE2 b on a.COL1=b.COL2
group by a.COL1
go

--删除测试
drop table TABLE1,TABLE2

/*--测试结果

COL1 1 2 3 4
---------- ---------- ---------- ---------- ----------
A 50 20
B 30 75
C 50

(所影响的行数为 3 行)
--*/
mastersky 2004-10-23
  • 打赏
  • 举报
回复
看到个和你的问题类似的。
http://community.csdn.net/Expert/topic/3484/3484547.xml?temp=.409588
mastersky 2004-10-23
  • 打赏
  • 举报
回复
如果有1000个数不是需要1000个字段?

34,592

社区成员

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

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