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 为多个表取消Pivot表_Sql_Sql Server - Fatal编程技术网

Sql 为多个表取消Pivot表

Sql 为多个表取消Pivot表,sql,sql-server,Sql,Sql Server,我在打开桌子时遇到了一个问题 我的桌子结构是 code level1名称level1邮件level2名称level2邮件Level3名称Level3电子邮件 1 aaaa@b.combbbb@b.com复写的副本cc@c.com 我需要将这些列转换成行,并需要如下输出 代码信息级别1级别2级别3 1名aa bb cc 1封电子邮件aa@b.com bb@b.com cc@c.com 我会使用apply select t.code, v.* from t cross appl

我在打开桌子时遇到了一个问题

我的桌子结构是

code level1名称level1邮件level2名称level2邮件Level3名称Level3电子邮件
1 aaaa@b.combbbb@b.com复写的副本cc@c.com
我需要将这些列转换成行,并需要如下输出

代码信息级别1级别2级别3
1名aa bb cc
1封电子邮件aa@b.com    bb@b.com       cc@c.com 

我会使用
apply

select t.code, v.*
from t cross apply
     (values ('Name', t.Level1Name, t.Level2Name, t.Level1Name, Level3Name),
             ('Email', t.Level1Email, t.Level1Email, t.Level2Email, Level3Email)
     ) v(info, level1, level2, level3);

这回答了你的问题吗。你试过什么?为什么不起作用?如果您不理解语法,那么它是什么呢?我在上面的场景中使用了这段代码。它适用于一个级别,但当我尝试另一个级别时,它不起作用。并且名称要与表Unpivot中的2个级别select code,Info,Level1相同(级别1表示(级别1名称,级别1邮件)UNION中的Info)UnPvt select code,Info,Level2表示表Unpivot中的Info(级别2表示(级别2名称,级别2邮件))的名称相同(级别1表示您在问题中的尝试,不是评论。使用该功能。你能帮助我使用该功能吗?单击超链接,然后使用“复制和粘贴”功能将您的尝试放在代码栏(
`
)内。它工作正常。。多谢各位