SQLSERVER行列的动态转换

其实这个问题已是老生常谈,但是还是有的朋友不清楚, 从网上搜索,很多都是你抄我,我抄你,也不知道有几个人做到测试后在来发布。不说这些了,还是切入正题吧。我将把我的步骤列出来,按照我的步骤做,不会有任何问题,因为这是我亲自测试后才发布的。没测试的不敢发,免的让同行笑话。这是我做的一个项目中的代码。
1、数据库结构
--==================================全款和按揭表


if exists(select * from sysobjects where name='sys_fukuan' and type='u')
drop table sys_fukuan
go
create table sys_fukuan
(        
 id           int   identity(1,1)  primary key   not null,
 houseid      int                                not null,
 pnumber      int  default(0)                        null, --人数
 zhe          varchar(20)                            null, --折扣
 fl           int                                    null, --分类(1、全款 2、按揭)
 date1        datetime default(getdate())            null, --发布时间
 ip           varchar(15)                            null, --ip
)
go


2、SQLSERVER过程
--==================================行列转换函数
create procedure fukuanPivot1
as
Begin
 DECLARE @ColumnNames VARCHAR(3000)
 SET @ColumnNames=''
 SELECT
 @ColumnNames = @ColumnNames + '[' + zhe + '],'
 FROM 
 (SELECT DISTINCT zhe FROM sys_fukuan where fl=1) t
  SET @ColumnNames= LEFT(@ColumnNames, LEN(@ColumnNames)-1)
  DECLARE @selectSQL NVARCHAR(3000)
  SET @selectSQL=
  'SELECT {0} FROM 
 (SELECT zhe,pnumber FROM sys_fukuan where fl=1) p 
  Pivot( Max(pnumber)  For zhe in ({0})) AS pvt '
  SET @selectSQL= REPLACE(@selectSQL,'{0}',@ColumnNames)
  exec sp_executesql @selectSQL
end
到此为止,SQLSERVER中行列转换动态版实现了,大家可以复制测试看看。下面说一下如何在PHP中把他展示出来
3、PHP代码
<table width="100%" border="0" cellspacing="1" cellpadding="1" bgcolor="#cccccc">
  <tr bgcolor="#FFFFFF">
  <?php
  $sql=$db->query("fukuanPivot1");
$i=0;
$j=0;
//===============================获取表的字段名
while($i<mssql_num_fields($sql))
{
$re_name=mssql_field_name($sql,$i);   
  ?>
    <td height="25" align="center"><?php echo $re_name."折";?></td>
    <?php 
$i++;
}?>
  </tr>
  <?php
  while($res=$db->fetch_array($sql))
  {
  ?>
 <tr  bgcolor="#FFFFFF">
  <?php
  for($k=0;$k<mssql_num_fields($sql);$k++)
  {
  ?>
    <td height="25" align="center"><?php echo $res[$k]."人";?></td>
    <?php
  }
?>
  </tr> 
  <?php $j++;}?>
</table>
到此为止就算结束了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值