2

例如我有一张桌子

IPPARSED
127
0
0
1

现在我需要旋转桌子所以它可以像这样

1 2 3 4
127 0 0 1

你能帮我怎么做吗?

4

4 回答 4

2

假设行总是按该顺序排列,您可以尝试使用 case 语句来透视表:

SELECT (case when (<condition to match first octet>) then IPPARSED else END) as 1,
       (case when (<condition to match second octet>) then IPPARSED else END) as 2,
       (case when (<condition to match third octet>) then IPPARSED else END) as 3,
       (case when (<condition to match fourth octet>) then IPPARSED else END) as 4
FROM <insert_table_name_or_table_definition_here>

参照。Anthony Mollinaro 的SQL 食谱第 365 页。


编辑:如果您在提出 a 时遇到问题<condition to match (...) octet>,您需要对查询结果进行 select 操作,以某种方式将行号添加到您的表中。在 Oracle 中,您将使用 rownum 伪列,但在 SQL Server 中不存在。在 SQL Server 2005 中,您确实可以将ROW_NUMBER()内置函数用作列,或者可能将该IDENTITY(...)函数用作该查询中的列。

于 2009-03-23T22:09:52.907 回答
1

嗨,您的表中没有另一列来汇总 IP 地址吗?您不应该在没有任何其他组列的情况下每条记录只有一个整数,对吗?你用什么数据库?

于 2009-03-23T21:56:12.190 回答
1

我认为当解析的 IP 以四行形式出现时,您正在做一些奇怪的事情。直接解析为一行应该很容易。您能否提供您的解析方法和/或输入格式?

于 2009-03-23T22:10:23.703 回答
1

我同意sheepsimulator 的回答,但是正如您对我的回答David 所评论的那样,如果您的表中没有分组列和多个条目,则很难找到匹配的条件。如果您只有一个 IP 条目(所以 4 行),那么您可以:

  • 使用 lineID(Oracle 中的 rownum)进行分组
  • 解析 4 行 ;-)

编辑:第一个解决方案(使用 lineID)可用于解析多个 IP 条目,但它需要在数据库中顺序插入。

于 2009-03-23T22:20:31.150 回答