SQLSERVER同表按照计数字段大小输出相应字段数据

同表按照计数字段大小输出相应字段数据

需求如图:

这里写图片描述

思路:

1.通过游标读取表中的所有数据ID集合
2.通过ID获取字段计数大小
3.遍历计数大小,拼接SQL语句

实现SQL代码:

DECLARE @id varchar(50)  --定义id变量
declare @itemnumber int --定义需要循环的次数
declare @tagint int --定义标志字段,用于结束循环
declare @sql varchar(2000)-- 存储合并后的语句(数据多拼接就多,请评估选择类型)
declare @sqlf varchar(2000)--双重循环最后存储的SQL
declare @ual varchar(255)
set @tagint=1
set @sqlf=''; --SERVER中必须初始化才使用
DECLARE My_Cursor CURSOR --定义游标
FOR (SELECT websites.id FROM dbo.websites) --查出需要的集合放到游标中(查ID方面下面条件查询)
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor INTO @id; --读取第一行数据(将)
WHILE @@FETCH_STATUS = 0 --游标状态
    BEGIN
        select @itemnumber = websites.alexa from websites where websites.id=@id; --根据ID查询出需要循环的次数(对应你那边表中的count字段)
        set @ual=' UNION ALL select websites.name from websites where id=  '+@id;
        set @sql=' select websites.name from websites where id=   '+@id +' ';
  if(@itemnumber>0)--判断条件
  begin
    while (@tagint<=(@itemnumber-1)) --循环条件
        begin
             set @sql=@sql+@ual
             set @tagint=@tagint+1
        end
        set @tagint=1;
        set @ual=' UNION ALL';
            if(@sqlf='')--判断@sqlf是否是被付直过,没有就不需要加UNION ALL
        begin
            set @sqlf=@sqlf+@sql;
        end
         else
          begin 
           set @sqlf=@sqlf+ @ual+@sql; 
           end  
  end 
        FETCH NEXT FROM My_Cursor INTO @id; --读取下一行数据(将下一个ID存在在@id中)
    END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标
--剩下的游标请自己关闭释放
/* PRINT(@sqlf);*/
 EXEC(@sqlf);
GO--结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值