0

请帮助我,我有多个表中的列,所有这些列的数据类型都是整数

我想对数据行进行排序(不是列(不是排序依据))除了主键列

例如

column1(pk)   column2         column3         column4          column5
1             6               5               3                1
2             10              2               3                1
3             1               2               4                3

我如何得到这个结果

column1(pk)   column2         column3         column4          column5
1             1               3               5                6
2             1               2               3                10
3             1               2               3                4

请尽快帮助我..有可能吗?还是不可能???如果不可能,无论排序如何,我都可以获得类似的结果

4

3 回答 3

1

你用的是什么数据库?数据库的功能很重要。其次,这表明存在数据结构问题。需要排序的东西通常是单独的实体。. . 也就是说,表格中的单独行。这篇文章的其余部分回答了这个问题。

如果数据库支持pivot/unpivot,您可以执行以下操作:

(1) 取消透视数据以获取格式 , , (2) 根据值的顺序,使用 row_number() 分配一个新列。(3) 使用 row_number() 创建一个 varchar 新列名。(4) 使用新列再次透视数据。

如果此功能不可用,您可以执行类似的操作。

首先,将数据更改为行:

(select id, 'col1', col1 as val from t) union all
(select id, 'col2', col2 from t) union all
. . .

打电话给这个byrow。以下查询附加了一个行号:

select br.*, row_number() over (partition by id order by val) as seqnum
from byrow br

将其放入子查询中以取消透视。最终解决方案如下所示:

with byrow as (<the big union all query>)
select id,
       max(case when seqnum = 1 then val end) as col1,
       max(case when seqnum = 2 then val end) as col2,
       ...
from (select br.*, row_number() over (partition by id order by val) as seqnum
      from byrow br
     ) br
group by id
于 2012-05-11T14:37:10.350 回答
0

您可以使用sql server 的pivot 函数来转换列中的行。在那里应用排序并再次使用 unpivot 将列转换为行。

于 2012-05-11T14:24:31.327 回答
0

这是使用 PIVOT 的一个很好的示例,您应该能够对其进行调整以满足您的需求

http://blogs.msdn.com/b/spike/archive/2009/03/03/pivot-tables-in-sql-server-a-simple-sample.aspx

于 2012-05-11T14:27:21.150 回答