我不知道如何完成这样的转换,from(1行,两对相同类型的列重复3次):
NormalCol1 | NormalCol2 | col1_0 | col2_0 | col1_1 | col2_2 | col1_2 | col2_2
"AD" | 2018-03-02 | "error"| "mess" | "warn" | "mess" | "info" | "mess"
to(3行和那6列合为2):
NormalCol1 | NormalCol2 | col1 | col2
"AD" | 2018-03-02 | "error"| "mess"
"AD" | 2018-03-02 | "warn" | "mess"
"AD" | 2018-03-02 | "info" | "mess"
您曾经偶然发现过这样的转变吗? 如果是,您是如何完成转换的?
Ps:列是固定的。
答案 0 :(得分:3)
使用public class UserRoleSeed
{
private readonly RoleManager<IdentityRole> _roleManager;
public UserRoleSeed(RoleManager<IdentityRole> roleManager)
{
_roleManager = roleManager;
}
public async void SeedAsync()
{
if ((await _roleManager.FindByNameAsync("Admin")) == null)
{
await _roleManager.CreateAsync(new IdentityRole { Name = "Admin" });
}
}
}
查询或UNION ALL
(也使用CROSS APPLY
)或union all
TABLE VALUE CONSTRUCTOR
答案 1 :(得分:1)
您应该进行UnPivot
操作。
请注意,在查询末尾添加的Where
子句最重要。
没有它,我们就不会告诉SQL Server第二组未透视数据与第一组数据如何匹配。如果没有WHERE,它将进行交叉联接,从而为col2的每个唯一数据生成col1的重复数据。
declare @tbl as table
(
NormalCol1 varchar(50),
NormalCol2 varchar(50),
col1_0 varchar(50),
col2_0 varchar(50),
col1_1 varchar(50),
col2_1 varchar(50),
col1_2 varchar(50),
col2_2 varchar(50)
)
insert into @tbl
select 'AD','2018-03-02','error','mess','warn','mess','info','mess'
select NormalCol1,NormalCol2,col1,col2 from @tbl
unpivot
(
col1 for details in (col1_0,col1_1,col1_2)
)unp
unpivot
(
col2 for data in (col2_0,col2_1,col2_2)
)unp
WHERE RIGHT(details,1) = RIGHT(data,1)