其实这个问题已是老生常谈,但是还是有的朋友不清楚, 从网上搜索,很多都是你抄我,我抄你,也不知道有几个人做到测试后在来发布。不说这些了,还是切入正题吧。我将把我的步骤列出来,按照我的步骤做,不会有任何问题,因为这是我亲自测试后才发布的。没测试的不敢发,免的让同行笑话。这是我做的一个项目中的代码。
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>
到此为止就算结束了。
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>
到此为止就算结束了。