ACCESS语句在sql server怎么用啊!

脆沙 2007-07-18 09:36:33
TRANSFORM Count(ccc.num)
SELECT ccc.name,address, Count(ccc.num) AS 合计
FROM ccc
GROUP BY ccc.name,address
PIVOT ccc.class;

这里面好像 TRANSFORM,PIVOT,sql都不认,是不是有其他语句可以替代?
谢谢!
...全文
195 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫气东来_999 2007-07-18
  • 打赏
  • 举报
回复
行转列,case when正解
echiynn 2007-07-18
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql = 'select name, sum(source) as 总分'

select @sql = @sql + 'sum(case subject when ''+subject+''
then source else 0 end) as ''+subject+'','
from (select distinct subject from test) as a

select @sql = left(@sql,len(@sql)-1) + ' from test group by name'

exec(@sql)
脆沙 2007-07-18
  • 打赏
  • 举报
回复
全部代码是:

 [subject] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
  
  [Source] [numeric](18, 0) NULL
  
  ) ON [PRIMARY]
  
  GO
  
  INSERT INTO [test] ([name],[subject],[Source]) values (N'张三',N'语文',60)
  
  INSERT INTO [test] ([name],[subject],[Source]) values (N'李四',N'数学',70)
  
  INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'英语',80)
  
  INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'数学',75)
  
  INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'语文',57)
  
  INSERT INTO [test] ([name],[subject],[Source]) values (N'李四',N'语文',80)
  
  INSERT INTO [test] ([name],[subject],[Source]) values (N'张三',N'英语',100)
  
  Go

--用于:交叉表的列数是确定的

select name,sum(case subject when '数学' then source else 0 end) as '数学',

sum(case subject when '英语' then source else 0 end) as '英语',

sum(case subject when '语文' then source else 0 end) as '语文'

from test

group by name





--用于:交叉表的列数是不确定的

declare @sql varchar(8000)

set @sql = 'select name,'



select @sql = @sql + 'sum(case subject when ''+subject+''

then source else 0 end) as ''+subject+'','

from (select distinct subject from test) as a



select @sql = left(@sql,len(@sql)-1) + ' from test group by name'

exec(@sql)

脆沙 2007-07-18
  • 打赏
  • 举报
回复
谢谢,已经找到解决办法,就是用sql交叉查询,
以下为实例代码
declare @sql varchar(8000)

set @sql = 'select name,'



select @sql = @sql + 'sum(case subject when '''+subject+'''

then source else 0 end) as '''+subject+''','

from (select distinct subject from test) as a



select @sql = left(@sql,len(@sql)-1) + ' from test group by name'

exec(@sql)


我还想在前面加一列合计,就是该学生的成绩合计,怎样实现?
最好可以把列排序!怎样实现?
谢谢


chuifengde 2007-07-18
  • 打赏
  • 举报
回复
这种交叉式查询(其实就是行转列),sql没有对应的语句,只能自已写动态语句来实现。
echiynn 2007-07-18
  • 打赏
  • 举报
回复
SQL Server裏面好象祇能用case when取代

但是肯定沒有transform pivot那麼方便

34,590

社区成员

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

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