1列到1行

时间:2014-11-28 08:16:20

标签: sql sql-server-2008 mysqli

我有一个名为table1的表名,其中一列名为ID 像这样 ID
1
2
3
4
5
6
7
8
9
10个

 现在我想要这样的出局  出来

1 2 3 4 5 6 7 8 9 10

表示1个具有不同值的coumn变为1行
 coumns名称可以是id1 id2 id3,.....的任何东西  即
id1 id2 id3 id4 ........ ID10
1 2 3 4 ........ 10

有可能这样吗?  如果是这样的话?

5 个答案:

答案 0 :(得分:1)

您正在尝试转置结果集。 以下是使用PIVOT在SQL中如何执行此操作的详细信息。 Simple way to transpose columns and rows in Sql?

另一个选择是复制excel中的数据并在那里转置它(它内置了一个Paste Special选项)。

答案 1 :(得分:1)

动态SQL和PIVOT关键字的组合可以满足您的需求。

此问题曾多次被问过:

只需谷歌搜索“t-sql dynamic pivot”

答案 2 :(得分:0)

您可以像这样使用PIVOT功能:

select * from table1

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

而不是" MAX(ID)"您可以在行中插入要包含的vaules。

答案 3 :(得分:0)

尝试以下方法:

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来概括查询。

感谢。

答案 4 :(得分:-1)

SQL查询始终会生成以前的已知列。这不是为您的任务。所以你无法单独使用SQL来解决这个问题。

但通常你会在程序中使用SQL而程序是用编程语言编写的。您可以根据自己的意愿使用该语言(无论是PHP,Java,C#还是其他语言)来格式化输出。

编辑:好的,我得到了一个downvote。我的回答太诚实了吗?太直接了? :-)或者只是不够详细?如果是后者,这里有一些代码来演示如何做。这是一个非常简单的任务。是的,有办法以更复杂的方式解决这个问题,但你为什么要这样做呢?

$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合作过。