如何解决C#取消透视行中的列
我有这些专栏:
- ID
- 名称
- 地址
- a
- 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,''),N') ul (res)'
);
EXEC sys.sp_executesql @sql;
END
但是它不起作用,有人可以帮我吗?
解决方法
这里是一个选项,可以“动态”取消透视数据,而无需实际使用动态SQL
如果
示例
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
返回
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。