在SQL中使用Pivot

时间:2009-03-23 21:50:34

标签: sql-server pivot

例如我有一张表

IPPARSED
127个
0
0
1个

现在我需要转动表格,以便它可以像这样

1 2 3 4
127 0 0 1

你能帮帮我吗?

4 个答案:

答案 0 :(得分: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 Cookbook pg 365。


编辑:如果您在查找<condition to match (...) octet>时遇到问题,则需要对查询结果进行选择操作,以便以某种方式向您的表添加编号。在Oracle中,您将使用rownum伪目标,但SQL Server中不存在。看来,在SQL Server 2005中,您可以使用ROW_NUMBER()内置函数作为列,或者可以使用IDENTITY(...)函数作为该查询中的列。

答案 1 :(得分:1)

嗨,您的表中是否有另一列聚合IP地址? Yous不应该每个记录只有一个整数而没有任何其他组列,对吗? 你用什么数据库?

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我同意绵羊模拟器的答案,但是当你评论我的答案大卫时,如果你的表中没有分组列和几个条目,那么很难找到匹配的条件。 如果您只有一个IP条目(如此4行),那么您可以:

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

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