我有一个名为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
有可能这样吗? 如果是这样的话?
答案 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合作过。