帮忙解释一下,这个SQL语句

apple18 2006-10-23 11:00:17

DECLARE @SQL AS VARCHAR(8000)

set @sql = ' select '
select @sql = @sql + 'sum(case NDATE when '''+NDATE+'''
then KVOL else 0 end) as ''日期'+NDATE+''','
from (SELECT DISTINCT NDATE FROM p WHERE NDATE>='20061009' AND NDATE<='20061013') as a

select @sql = left(@sql,len(@sql)-1) +' FROM p WHERE NDATE>=''20061009'' AND NDATE<=''20061013'' '


PRINT @sql
EXEC (@SQL)
...全文
260 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhhdyj 2006-10-24
  • 打赏
  • 举报
回复
这样理解:
从下面的结果集一行一行的取数据,然后按上面语句连接
SELECT DISTINCT NDATE FROM p WHERE NDATE>='20061009' AND NDATE<='20061013'
xyxfly 2006-10-24
  • 打赏
  • 举报
回复
select @sql = @sql + ',sum(case bb when '''+bb+''' then je end) ['+bb+']'
from (select distinct bb from data) as a

这里相当于一个循环

其实你可以把print出来的语句看看就知道了 :)
apple18 2006-10-23
  • 打赏
  • 举报
回复
select @sql = @sql + ',sum(case bb when '''+bb+''' then je end) ['+bb+']'
from (select distinct bb from data) as a
实现动态效果,
但怎么解释啊,有相关的语法说明吗
lxzm1001 2006-10-23
  • 打赏
  • 举报
回复
小黑子是吧
happydreamer 2006-10-23
  • 打赏
  • 举报
回复
--example
字段:客户名称 bb je
a1 HKD 100
a1 HKD 200
a1 USD 150
a1 USD 250
a2 HKD 200
a2 USD 100
a3 HKD 300
a3 HKD 400

先对a分组,再分别合计b=h和b=u的数放在sumhk,sumus字段中

结果:客户名称 港币 美金
a1 300 400
a2 200 100
a3 700 0
Answer:
select 客户名称,
sum(case when bb='HKD' then je else 0 end) as 港币,
sum(case when bb='USD' then je else 0 end) as 美金
from data group by 客户名称

--一样的效果,用了动态sql

declare @sql varchar(8000)
set @sql = 'select 客户名称'
select @sql = @sql + ',sum(case bb when '''+bb+''' then je end) ['+bb+']'
from (select distinct bb from data) as a
select @sql = @sql+' from data group by 客户名称'
exec(@sql)
子陌红尘 2006-10-23
  • 打赏
  • 举报
回复
PRINT @sql --这一句输出了拼接完的SQL语句
guyan033 2006-10-23
  • 打赏
  • 举报
回复
行列互换

把各时间换为列

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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