给SQL查询出来的结果增加新列,列值为空

allen0118 2015-10-20 08:34:02
之前在http://bbs.csdn.net/topics/391842883 请教了一个拼接SQL 的问题,我需要在现有的结果里面追加一些列名进去,这个列名是动态生成的,比如现有的数据为 {SERIAL_NUMBER_1},{SERIAL_NUMBER_2},那么我需要在最后面追加如下列:
{SERIAL_NUMBER_3},{SERIAL_NUMBER_4},{SERIAL_NUMBER_5},追加进去的列的内容为空即可,关键是列名后面的需要一定要依次累加,我试了好几种办法都不理想,请高手帮忙看看,谢谢!
...全文
1829 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
allen0118 2015-10-21
  • 打赏
  • 举报
回复
已解决,大致思路如下: 先把需要加进去的列保存在临时表,然后对这个临时表进行行转列,最后将两个表的数据 join 起来,
DECLARE @sql VARCHAR(8000)
SET @sql = 'SELECT '   
SELECT @sql = @sql + 'MAX(CASE [XNAME] WHEN '''+[XNAME]+''' THEN '''' ELSE '''' END) AS '''+QUOTENAME('SERIAL_NUMBER_'+[XNAME])+''','   
FROM (SELECT DISTINCT [XNAME] FROM [_TTT]) AS a     
SELECT @sql = LEFT(@sql,LEN(@sql)-1) + ' FROM [_TTT] GROUP BY [XNAME]'   
PRINT(@sql)
EXEC(@sql)
GO
allen0118 2015-10-20
  • 打赏
  • 举报
回复
引用 1 楼 yupeigu 的回复:
这是一个例子:
declare @sql varchar(1000)
declare @i int

set @sql =''
set @i = 0

select @i = @i+1,
       @sql = @sql + ',{SERIAL_NUMBER_'+ltrim(@i)+'}'
from sys.tables

select stuff(@sql,1,1,'')
/*
{SERIAL_NUMBER_1},{SERIAL_NUMBER_2},{SERIAL_NUMBER_3},{SERIAL_NUMBER_4},{SERIAL_NUMBER_5},{SERIAL_NUMBER_6}
*/
谢谢版主回复,有没有办法在之前的结果上面直接追加进去?或者写死的也行。
LongRui888 2015-10-20
  • 打赏
  • 举报
回复
这是一个例子:
declare @sql varchar(1000)
declare @i int

set @sql =''
set @i = 0

select @i = @i+1,
       @sql = @sql + ',{SERIAL_NUMBER_'+ltrim(@i)+'}'
from sys.tables

select stuff(@sql,1,1,'')
/*
{SERIAL_NUMBER_1},{SERIAL_NUMBER_2},{SERIAL_NUMBER_3},{SERIAL_NUMBER_4},{SERIAL_NUMBER_5},{SERIAL_NUMBER_6}
*/
LongRui888 2015-10-20
  • 打赏
  • 举报
回复
引用 2 楼 chenpeng0118 的回复:
[quote=引用 1 楼 yupeigu 的回复:] 这是一个例子:
declare @sql varchar(1000)
declare @i int

set @sql =''
set @i = 0

select @i = @i+1,
       @sql = @sql + ',{SERIAL_NUMBER_'+ltrim(@i)+'}'
from sys.tables

select stuff(@sql,1,1,'')
/*
{SERIAL_NUMBER_1},{SERIAL_NUMBER_2},{SERIAL_NUMBER_3},{SERIAL_NUMBER_4},{SERIAL_NUMBER_5},{SERIAL_NUMBER_6}
*/
谢谢版主回复,有没有办法在之前的结果上面直接追加进去?或者写死的也行。[/quote] 可以这样,先计算一下原来的rn最大是多少,比如假设是5,设置一个变量,放到变量里,下面的代码加到上次的代码里面:
declare @max_rn int;

select @max_rn = (select count(*) from #t)

select @tsql='select [{PRODUCT_NAME}],[{LOT_NAME}],[{CARTON_SN}],[{CUSTOMER_CARTON_SN}],'+@tsql
              +'[{SERIAL_NUMBER_'+ltrim(@max_rn+1)+']}'+....你要加几个就几个
                    +'  from #t '
                    +'  group by [{PRODUCT_NAME}],[{LOT_NAME}],[{CARTON_SN}],[{CUSTOMER_CARTON_SN}] '
allen0118 2015-10-20
  • 打赏
  • 举报
回复
引用 3 楼 qq_17482963 的回复:
写死的也行?那就这样,想加几列自己加
select *,convert(nvarchar(50),null)'{SERIAL_NUMBER_5}' from tb
就拿你这个语句来说,无法知道是从第5个开始的,需要从最后返回的结果里面累加啊。
qq_17482963 2015-10-20
  • 打赏
  • 举报
回复
写死的也行?那就这样,想加几列自己加
select *,convert(nvarchar(50),null)'{SERIAL_NUMBER_5}' from tb

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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