Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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 数据规范化:切换数据的列和行_Sql_Sql Server 2012 - Fatal编程技术网

Sql 数据规范化:切换数据的列和行

Sql 数据规范化:切换数据的列和行,sql,sql-server-2012,Sql,Sql Server 2012,我有一张这样的桌子: Table 1 ID Data 1 Name 2 Adam 3 SEX 4 Male 5 AGE 6 27 7 Name 8 Bob 9 SEX 10 Male 11 AGE 12 28 我想把它转换成以下格式 ID NAME SEX AGE 1 Adam Male 27 2 Bob Male 28 如何在Sql Server中执行此操作? 谢谢给你: insert in

我有一张这样的桌子:

Table 1
ID   Data
1    Name
2    Adam
3    SEX
4    Male
5    AGE
6    27
7    Name
8    Bob
9    SEX
10   Male
11   AGE
12   28
我想把它转换成以下格式

ID  NAME  SEX   AGE
1   Adam  Male   27
2   Bob   Male   28
如何在Sql Server中执行此操作? 谢谢

给你:

insert into table2
select t1.Data "name", t2.Data "sex", t3.Data "Age"
from table1 t1,
table1 t2,
table1 t3
where (t1.ID + 4) % 6 = 0
and (t2.ID + 2) % 6 = 0
and t3.ID % 6 = 0
and t1.ID + 2 = t2.ID
and t1.ID + 4 = t3.ID
亚当男27

鲍勃男28

爱丽丝女99


我添加了一个额外的记录来再次检查它是否能在数据的前两次迭代之后工作。顺便说一句,您将无法使用PIVOT进行此操作,因为您的数据未规范化

您从哪里获得t4和t6?@bc004346-t4和t6与您的t#s是同一来源。它们是性别和年龄专栏的来源。虽然您的方法代码较少,而且似乎可以工作,但您非常依赖以ID 1开头的行。我知道这是他的例子,但如果这个表不是一次性问题,有人意外地在任何地方添加了一行不符合精确的数值格式,您的查询将返回不正确的结果。另一方面,不管是谁否决了,请说明原因。哦,是的,我错过了下游部分-看不到滚动条。这是有道理的。我认为,考虑到这个问题,假设这些数据可能是从某个地方输入的,而OP不知道这些数据的编号有任何不规则之处是相当安全的;可能是重复的不,它不一样。这不是标准化数据;
insert into table2
select t1.Data "name", t2.Data "sex", t3.Data "Age"
from table1 t1,
table1 t2,
table1 t3
where (t1.ID + 4) % 6 = 0
and (t2.ID + 2) % 6 = 0
and t3.ID % 6 = 0
and t1.ID + 2 = t2.ID
and t1.ID + 4 = t3.ID