1 column to 1 row



>我有一个名为 table1 的表名,其中一列名为 ID喜欢这个
身份证

1阿拉伯数字

3

5
6
7
8
910

现在我想要这样的输出 输出

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

有可能变成这样吗? 如果是这样,如何?

您正在尝试转置结果集。以下是有关如何使用 PIVOT 在 SQL 中执行此操作的良好信息。在 SQL 中转置列和行的简单方法?

另一种选择是在 excel 中复制数据并将其转置在那里(它内置了一个选择性粘贴选项)。

动态 SQL 和 PIVOT 关键字的组合将执行您想要的操作。

这个问题之前已经问过很多次了:

  • SQL Server Dynamic PIVOT query?
  • T-SQL 动态透视
  • SQL Server 中的动态透视列

只需在谷歌上搜索"t-sql 动态透视"

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

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

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

请尝试以下操作:

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

谢谢。

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。

最新更新