求助SQL列转行以及合计小计问题

怒熊 2013-10-24 04:32:25




求帮助此语句怎么写,原始表如下,语句如下:
declare @sql varchar(8000)
set @sql = 'select fName as ' + 'fname'
select @sql = @sql + ' , max(case size when ''' + size + ''' then color else 0 end) [' + size + ']'
from (select distinct size from #lj_temp2) as a
set @sql = @sql + ' from tb group by fname'
exec(@sql)
执行完毕后报错
消息 245,级别 16,状态 1,第 3 行
在将 varchar 值 '' then color else 0 end) [' 转换成数据类型 int 时失败。
...全文
449 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
好像挺复杂的啊
怒熊 2013-10-25
  • 打赏
  • 举报
回复
引用 27 楼 hdhai9451 的回复:
按你上面的条件,可能在order by 后面加条件就可以了,如果不行加子查询,再加排序条件。

加了Order by显示总计在第一条
Andy__Huang 2013-10-25
  • 打赏
  • 举报
回复
按你上面的条件,可能在order by 后面加条件就可以了,如果不行加子查询,再加排序条件。
怒熊 2013-10-25
  • 打赏
  • 举报
回复
引用 25 楼 fate1987 的回复:
其他的数据建议用程序解决

create table T_AColor
(

cname1 varchar(50),

fname varchar(50),

fqty int,

fconsignp int,

color varchar(10),

size int

)
insert into  T_AColor select '安徽安','JLR5859',1,175,12,45
union all select '安徽安','JLR5822',1,185,11,45
union all select '山东济','JLR5809',1,180,9,45
union all select '山东济','JLR5819',2,160,20,43


declare @sql varchar(8000)
 set @sql = 'select cname1,fName,color '
 select @sql = @sql + ' , max(case size when  ' + CAST(a.size as varchar) + '  then fqty  else 0 end) '''+CAST(a.size as varchar)+''''
  from (select distinct ISNULL(size,0) as size from T_AColor  ) a
 set @sql = @sql + ',max(fconsignp) as fconsignp,max(fqty) as ''小计'' from T_AColor group by fname,cname1,color'
 print(@sql)
 exec(@sql) 

Select * from t_AuxItem where fitemclassid =3002
SELECT cname1,fname,color,
sum(case size when '41' then isnull(fqty,0) else 0 end) [s1],
sum(case size when '42' then isnull(fqty,0) else 0 end) [s2],
sum(case size when '43' then isnull(fqty,0) else 0 end) [s3],
sum(case size when '44' then isnull(fqty,0) else 0 end) [s4],
sum(case size when '45' then isnull(fqty,0) else 0 end) [s5],
sum(case size when '46' then isnull(fqty,0) else 0 end) [s6],
sum(case size when '47' then isnull(fqty,0) else 0 end) [s7],
sum(case size when '48' then isnull(fqty,0) else 0 end) [s8],
sum(case size when '49' then isnull(fqty,0) else 0 end) [s9],
max(fconsignprice)as price
into #lj_temp3
FROM #lj_temp2
group by cname1,fname,color
order by cname1,fname,color
列转行的问题搞定了,还有一个问题我怎么把某一行放到表的最后一行显示
火拼阿三 2013-10-25
  • 打赏
  • 举报
回复
其他的数据建议用程序解决

create table T_AColor
(

cname1 varchar(50),

fname varchar(50),

fqty int,

fconsignp int,

color varchar(10),

size int

)
insert into  T_AColor select '安徽安','JLR5859',1,175,12,45
union all select '安徽安','JLR5822',1,185,11,45
union all select '山东济','JLR5809',1,180,9,45
union all select '山东济','JLR5819',2,160,20,43


declare @sql varchar(8000)
 set @sql = 'select cname1,fName,color '
 select @sql = @sql + ' , max(case size when  ' + CAST(a.size as varchar) + '  then fqty  else 0 end) '''+CAST(a.size as varchar)+''''
  from (select distinct ISNULL(size,0) as size from T_AColor  ) a
 set @sql = @sql + ',max(fconsignp) as fconsignp,max(fqty) as ''小计'' from T_AColor group by fname,cname1,color'
 print(@sql)
 exec(@sql) 

怒熊 2013-10-25
  • 打赏
  • 举报
回复
引用 23 楼 fate1987 的回复:

select @sql = @sql + ' , sum(case size when  '+ size +' then color else 0 end) [' + size + ']'
用sum
数据做成Excel发到你邮箱了
火拼阿三 2013-10-24
  • 打赏
  • 举报
回复

select @sql = @sql + ' , sum(case size when  '+ size +' then color else 0 end) [' + size + ']'
用sum
火拼阿三 2013-10-24
  • 打赏
  • 举报
回复

select @sql = @sql + ' , max(case size when  '+ size +' then 1 else 0 end) [' + size + ']'
火拼阿三 2013-10-24
  • 打赏
  • 举报
回复
说了吧数据和表发给我啊。。。 先前是字段属性的问题吧?
怒熊 2013-10-24
  • 打赏
  • 举报
回复
引用 18 楼 fate1987 的回复:
[quote=引用 16 楼 u012558840 的回复:] [quote=引用 14 楼 fate1987 的回复:] 用 print(@sql)打印出来看看是什么SQL,吧这SQL贴出来运行,看错误抱在哪。。。或者把数据和表给我啊。。。
你Emai多少[/quote] 447087004@qq.com 你不会直接贴在这里面啊。。[/quote] 手工变更字段属性后 发现语句里的 set @sql = @sql + ' from tb group by fname' 表名tb没改 改完以后可以出数据了,但是不是我要的表样, 如果要实现第一张图片那种样式 要怎么写
怒熊 2013-10-24
  • 打赏
  • 举报
回复
手工变更字段属性后 发现语句里的 set @sql = @sql + ' from tb group by fname' 表名tb没改 改完以后可以出数据了,但是不是我要的表样, 如果要实现第一张图片那种样式 要怎么写
火拼阿三 2013-10-24
  • 打赏
  • 举报
回复
引用 16 楼 u012558840 的回复:
[quote=引用 14 楼 fate1987 的回复:] 用 print(@sql)打印出来看看是什么SQL,吧这SQL贴出来运行,看错误抱在哪。。。或者把数据和表给我啊。。。
你Emai多少[/quote] 447087004@qq.com 你不会直接贴在这里面啊。。
火拼阿三 2013-10-24
  • 打赏
  • 举报
回复
你的SIZE和color都是int?
怒熊 2013-10-24
  • 打赏
  • 举报
回复
引用 14 楼 fate1987 的回复:
用 print(@sql)打印出来看看是什么SQL,吧这SQL贴出来运行,看错误抱在哪。。。或者把数据和表给我啊。。。
你Emai多少
火拼阿三 2013-10-24
  • 打赏
  • 举报
回复
里面不能是VARCHAR值啊,你用了MAX函数里面肯定是数值类型啊。。
火拼阿三 2013-10-24
  • 打赏
  • 举报
回复
用 print(@sql)打印出来看看是什么SQL,吧这SQL贴出来运行,看错误抱在哪。。。或者把数据和表给我啊。。。
chen357313771 2013-10-24
  • 打赏
  • 举报
回复
引用 12 楼 u012558840 的回复:
[quote=引用 9 楼 fate1987 的回复:]
declare @sql varchar(8000)
 select @sql = @sql + ' , max(case size when  '+ size +' then color else 0 end) [' + )
你多多的2个单引号去掉试试,我最后一个方法试了吗?
还是不行 declare @sql varchar(8000) set @sql = 'select fName as ' + 'fname' select @sql = @sql + ' , max(case size when '+ size +' then color else 0 end) [' + size + ']' from (select distinct size from #lj_temp2) as a set @sql = @sql + ' from tb group by fname' exec(@sql) 消息 245,级别 16,状态 1,第 3 行 在将 varchar 值 ' then color else 0 end) [' 转换成数据类型 int 时失败。 [/quote]把0转成varchar 试试
怒熊 2013-10-24
  • 打赏
  • 举报
回复
引用 9 楼 fate1987 的回复:
declare @sql varchar(8000)
 select @sql = @sql + ' , max(case size when  '+ size +' then color else 0 end) [' + )
你多多的2个单引号去掉试试,我最后一个方法试了吗?
还是不行 declare @sql varchar(8000) set @sql = 'select fName as ' + 'fname' select @sql = @sql + ' , max(case size when '+ size +' then color else 0 end) [' + size + ']' from (select distinct size from #lj_temp2) as a set @sql = @sql + ' from tb group by fname' exec(@sql) 消息 245,级别 16,状态 1,第 3 行 在将 varchar 值 ' then color else 0 end) [' 转换成数据类型 int 时失败。
火拼阿三 2013-10-24
  • 打赏
  • 举报
回复
可以了吗?????
火拼阿三 2013-10-24
  • 打赏
  • 举报
回复
你COLOR是什么类型?color你是int行吗?实在不行你把数据给我。。。
加载更多回复(9)

34,587

社区成员

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

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