Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 1列到1行_Sql_Sql Server 2008_Mysqli - Fatal编程技术网

Sql 1列到1行

Sql 1列到1行,sql,sql-server-2008,mysqli,Sql,Sql Server 2008,Mysqli,我有一个名为table1的表名,其中一列名为ID 这样地 身份证件 1. 2. 3. 4. 5. 6. 7. 8. 9 10 现在我要把它像这样放出去 发出 12345678910 这意味着,具有不同值的1列变为1行 coumns名称可以是像id1 id2 id3,。。。。。 即 id1 id2 id3 id4…….ID10 1、2、3、4、10 有可能变成这样吗? 如果是这样,怎么做?您正在尝试转置结果集。 下面是有关如何在SQL中使用PIVOT执行此操作的详细信息。 另一个选项是复制exc

我有一个名为table1的表名,其中一列名为ID 这样地 身份证件 1. 2. 3. 4. 5. 6. 7. 8. 9 10 现在我要把它像这样放出去 发出

12345678910

这意味着,具有不同值的1列变为1行 coumns名称可以是像id1 id2 id3,。。。。。 即 id1 id2 id3 id4…….ID10 1、2、3、4、10

有可能变成这样吗?
如果是这样,怎么做?

您正在尝试转置结果集。 下面是有关如何在SQL中使用PIVOT执行此操作的详细信息。


另一个选项是复制excel中的数据并将其转置到excel中,因为它内置了一个“粘贴特殊”选项。

SQL查询总是在已知列之前生成。这不是为您的任务提供的。因此,单用SQL无法解决这个问题

但通常您会在程序中使用SQL,并且程序是用编程语言编写的。您可以使用PHP、Java、C或其他任何语言根据自己的意愿格式化输出

编辑:好的,我投了反对票。我的回答是不是太诚实了?太直截了当了?:-还是不够详细?对于后者,这里有一些代码来演示如何操作。这是一项非常简单的任务。是的,有很多方法可以用更复杂的方式解决这个问题,但是你为什么要这样做呢

$query = $db->query("select id from table1 order by id");
for($i=1; $row = $query->fetch_object(); ++$i) 
{
  $header = $header."<td>ID ".$i."</td>";
  $data = $data."<td>".$row->id."</td>";
}
echo "<tr>".$header."</tr>";
echo "<tr>".$data."</tr>";

此代码可能有缺陷。到目前为止,我还没有使用过mysqli。

您可以像这样使用PIVOT函数:

select * from table1

pivot
(
  MAX(ID) for ID in ([1],[2],[3],[4],[5],[6])
) piv

您可以在行中插入您想要的变量,而不是MAXID。

动态SQL和PIVOT关键字的组合将实现您想要的功能

这个问题以前被问过很多次:

只需在谷歌上搜索t-sql dynamic pivot即可

尝试以下操作:

declare @tab1 table (id int)

insert into @tab1 select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10

select * from @tab1

select [1] as id1, [2] as id2, [3] as id3, [4] as id4, [5] as id5, [6] as id6, [7] as id7, [8] as id8, [9] as id9, [10] as id10
from
(
select id from @tab1
) t
pivot
(
max(id) for id in ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10])
)pvt
您可以使用动态SQL来概括查询


谢谢。

查找PIVOT函数这可以使用动态SQL和PIVOT关键字组合来完成。这是一个很好的例子。是像很多行都有一列对一行有一列,还是所有的行都应该成为独立的列?@Munna:答案对你有帮助吗?如果是,请接受回答。如果没有,缺少什么?使用动态sql,可以在未知列之前返回查询。这是一个如何使用带PIVOT关键字的动态SQL来完成此任务的示例。什么?为什么他不能使用PIVOT函数,它会做他想做或不想做的事情?@Dan:是的,你可以使用一种语言来构建SQL。作为SQL和编程语言的混合体,T-SQL提供了这一点,对于Oracle或Java等,PL/SQL也提供了这一点。但单靠SQL无法解决这个问题。由于此请求被标记为mysqli,因此PHP可能必须能够处理结果列表,因此最好使用PHP根据需要选择和显示数据。@噩梦用户:PIVOT也要求在已知结果行之前显示数据。编写查询时必须知道ID。在t-SQL中编写动态SQL不需要编程语言。。。看一看。所以这个问题实际上可以完全用T-SQL解决。另外,为什么PHP不能处理列数未知的记录集?