用户名:  密码:
兄弟在线   

标题:SQL SERVER 2005产生流水号和行转列语句

作者:agui005 来源:http://www.xdlmn.com 时间:2011-09-08

  生成 流水号 格式 'QJ'+年四位月两位日两位+四位流水号(1001开始)
  存储字段 ba_no


 declare @aa varchar(20)
    select @aa= isnull(max(substring(ba_no,11,len(ba_no)-10))+1,'1001') from qj_apply where

substring(ba_no,3,8)=CONVERT(varchar(10) , getdate(), 112 ) group by substring(ba_no,11,len

(ba_no)-10)
    if @aa is null
     set @aa='QJ'+CONVERT(varchar(10) , getdate(), 112 )+'1001';
    else
    set @aa='QJ'+CONVERT(varchar(10) , getdate(), 112 )+@aa;


行转列 用到pivot

如一个表 T_Dictionary

字段 codename,codedim
      0岁       0
      1岁       1
      2岁       2
      ...       ...
      100岁     100

另一个表 T_Population
  rowcodedim ,colcodedim ,totalamount
   440000      0            120
   440000       1           250
   ...          ..           ..
   440000       100          2
   440001       0            132
   440001       1            546
   ...          ...          ...
   440001       100         45

下面构造sql 语句
 
1其中注意 '['+codename+']' 这个必须加'[' ,']' 要不然 后边执行 exec的时候会出错,原因是转换列时

不能以数字开头做列名,加了中括号后就不出问题

2  在下边的
   select tx.* from (select top 100 percent * from T_Dictionary
   WHERE codetype = 5
   order by cast(codedim as bigint)) tx
中在子查询进行order by 需要加  'top 100 percent * '

如果直接 写成下边语句
select @sql=isnull(@sql+',','')+'['+codename+']' FROM
   T_Dictionary
   WHERE codetype = 5
   order by cast(codedim as bigint)

这样查出来的话会只有最后一行的数据,而不是所有数据的合并。

declare @sql varchar(8000)
select @sql=isnull(@sql+',','')+'['+codename+']' FROM (
   select tx.* from (select top 100 percent * from T_Dictionary
   WHERE codetype = 5
   order by cast(codedim as bigint)) tx)  t
---select @sql
exec ('select * from (select rowcodedim,totalamount,(select codename from T_Dictionary where

T_Dictionary.codedim=T_Population.colcodedim  ) codename from T_Population ) a pivot (max

(totalamount) for codename in('+ @sql +')) b order by rowcodedim')
 



总点击 [3297]   评论  0 查看评论
上一篇:asp.net ProcessBar.cs类
下一篇:asp.net解决导出excel乱码或格式混乱
【关闭窗口】
您可能感兴趣的文章
我要评论
          
评论标题:   可以输入250
 
验证数字: 2 + 5 =
兄弟友情提示
· 请自觉遵守国家有关法律、法规,尊重网上道德。
· 兄弟在线坚决抵制不良言行,违者文责自负。
· 如果文章有版权或其他问题等,请联系我们,我们会尽快处理。
· 文章注名来自网络的旨在传播共享信息,不做其它用途;注名原创的本站支持原创,但不代表同意其观点。
· 兄弟在线拥有管理用户与其文章和评论的一切权利,并有权在网站内转载或引用。
兄弟在线
兄弟热门文章
兄弟推荐文章
兄弟站内搜索

兄弟感兴趣的文章
兄弟最新影视