Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL中使用Pivot_Sql Server_Pivot - Fatal编程技术网

Sql server 在SQL中使用Pivot

Sql server 在SQL中使用Pivot,sql-server,pivot,Sql Server,Pivot,例如,我有一张桌子 i已分配 127 0 0 1 现在我需要旋转桌子,这样它就可以像这样了 1234 127001 您能帮我做些什么吗?嗨,您的表中没有其他列来聚合IP地址吗? 您不应该在没有任何其他组列的情况下,每个记录只有一个整数,是吗? 您使用的数据库是什么?您可以尝试使用case语句来透视表,假设行始终按该顺序排列: SELECT (case when (<condition to match first octet>) then IPPARSED else END) as

例如,我有一张桌子

i已分配
127
0
0
1

现在我需要旋转桌子,这样它就可以像这样了

1234
127001


您能帮我做些什么吗?

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

您可以尝试使用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>
选择(case-when()然后IPPARSED else END)为1,
(当()的情况下,则i指定为else END)为2,
(当()的情况下,则i指定为else END)为3,
(当()时的情况,然后i指定为else END)为4
从…起
参见安东尼·莫利纳罗的第365页



编辑:如果您在生成
时遇到问题,则需要使用select对查询结果进行操作,以便以某种方式将行号添加到表中。在Oracle中,可以使用rownum psuedocolumn,但SQL Server中不存在该列。在SQL Server 2005中,您似乎可以使用
行号()
内置函数作为列,也可以使用
标识(…)
函数作为该查询中的列

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

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

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

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

SQL Server 2005,是的,在解析方法期间,我只有一列,因为im,但如何区分表中的多个条目?如何编写以下两个地址:127.0.0.1和127.0.0.2?如果可以,可能需要重新编写解析IP地址的方法。通过将它们按顺序放在表中,这打破了关系数据库的设计规则。由于每个八位组都是相互关联的,所以应该将它们作为一行四列返回。