c# unpivot 列在行中
c# unpivot columns in rows
我有这些专栏:
- ID
- 姓名
- 地址
- 一个
- b
- c
- d
- e
- f
我需要对从 a 到 f 的列进行逆透视以获得:
编号
姓名
地址
资源
CREATE PROCEDURE [dbo].[sProcedure]
AS
BEGIN
DECLARE @UnpivotList NVARCHAR(MAX) = N'';
SELECT @UnpivotList = CONCAT(@UnpivotList, ',(''fe.[', c.name, '])')
FROM
sys.columns c
WHERE
c.object_id = OBJECT_ID('_myTable')
AND c.column_id >3;
DECLARE @sql NVARCHAR(MAX) = CONCAT(N'
SELECT
fe.ID,
fe.Name,
fe.Address,
ul.res
INTO
newTable
FROM
myTable fe
CROSS APPLY ( VALUES ', STUFF(@UnpivotList, 1, 1, ''), N') ul (res)'
);
EXEC sys.sp_executesql @sql;
END
但是它不起作用,有人可以帮助我吗?
这是一个选项,可以“动态地”反透视您的数据,而无需实际使用动态 SQL
如果<2016 ...有一个XML方法
例子
Declare @YourTable Table ([ID] varchar(50),[Name] varchar(50),[address] varchar(50),[a] varchar(50),[b] varchar(50),[c] varchar(50),[d] varchar(50),[e] varchar(50),[f] varchar(50)) Insert Into @YourTable Values
(1,'Jane','123 Main','val1','val2','val3','val4','val5','val6')
Select A.ID
,A.Name
,A.Address
,C.*
From @YourTable A
Cross Apply ( Select A.* for JSON Path,Without_Array_Wrapper) B(JSONData)
Cross Apply (
Select [Key]
,[Value]
From OpenJson(JSONData)
Where [Key] not in ('ID','Name','address') ---<< Optional
) C
Returns
ID Name Address Key Value
1 Jane 123 Main a val1
1 Jane 123 Main b val2
1 Jane 123 Main c val3
1 Jane 123 Main d val4
1 Jane 123 Main e val5
1 Jane 123 Main f val6
我有这些专栏:
- ID
- 姓名
- 地址
- 一个
- b
- c
- d
- e
- f
我需要对从 a 到 f 的列进行逆透视以获得:
编号 姓名 地址 资源
CREATE PROCEDURE [dbo].[sProcedure]
AS
BEGIN
DECLARE @UnpivotList NVARCHAR(MAX) = N'';
SELECT @UnpivotList = CONCAT(@UnpivotList, ',(''fe.[', c.name, '])')
FROM
sys.columns c
WHERE
c.object_id = OBJECT_ID('_myTable')
AND c.column_id >3;
DECLARE @sql NVARCHAR(MAX) = CONCAT(N'
SELECT
fe.ID,
fe.Name,
fe.Address,
ul.res
INTO
newTable
FROM
myTable fe
CROSS APPLY ( VALUES ', STUFF(@UnpivotList, 1, 1, ''), N') ul (res)'
);
EXEC sys.sp_executesql @sql;
END
但是它不起作用,有人可以帮助我吗?
这是一个选项,可以“动态地”反透视您的数据,而无需实际使用动态 SQL
如果<2016 ...有一个XML方法
例子
Declare @YourTable Table ([ID] varchar(50),[Name] varchar(50),[address] varchar(50),[a] varchar(50),[b] varchar(50),[c] varchar(50),[d] varchar(50),[e] varchar(50),[f] varchar(50)) Insert Into @YourTable Values
(1,'Jane','123 Main','val1','val2','val3','val4','val5','val6')
Select A.ID
,A.Name
,A.Address
,C.*
From @YourTable A
Cross Apply ( Select A.* for JSON Path,Without_Array_Wrapper) B(JSONData)
Cross Apply (
Select [Key]
,[Value]
From OpenJson(JSONData)
Where [Key] not in ('ID','Name','address') ---<< Optional
) C
Returns
ID Name Address Key Value
1 Jane 123 Main a val1
1 Jane 123 Main b val2
1 Jane 123 Main c val3
1 Jane 123 Main d val4
1 Jane 123 Main e val5
1 Jane 123 Main f val6