【发布时间】:2021-12-23 11:57:51
【问题描述】:
我是堆栈溢出和 SQL 的新手,我正在尝试在 Microsoft Power Query 中复制一个函数以在 SQL 中使用。
我知道如何 Unpivot 并在 SQL 中保留 1 列,然后必须按名称引用所有其他列才能进行 unpivot。
现在我需要保留 3 个 ID 列并取消透视其余列 (此表目前有 355 列,以后会有所变化)
谁能帮我解决这个问题?
这是我得到的最远的(感谢 Youtube 上的 RAV DBLearning),但我似乎找不到将列类型转换为 1 类型的方法。
DECLARE
@SQLSTRING NVARCHAR(MAX),
@COLUMNLIST NVARCHAR(1000) = ''
SELECT
@COLUMNLIST = @COLUMNLIST + QUOTENAME(NAME) + ','
FROM
sys.columns
WHERE
OBJECT_ID = OBJECT_ID('xp.XPROPERTYVALUES') AND
--COLUMN_ID NOT IN(1,2,3)
COLUMN_ID IN(452,453,454)
SELECT
@COLUMNLIST = LEFT(@COLUMNLIST,LEN(@COLUMNLIST)-1)
SET
@SQLSTRING =
'
SELECT
upv.id,
upv.item_id,
upv.itemtype_id,
upv.X_Category,
upv.X_Values
FROM
xp.XPROPERTYVALUES
UNPIVOT
(
X_Values FOR X_Category
IN
(' + @COLUMNLIST + ')
) AS upv
'
PRINT
(@SQLSTRING)
EXECUTE
sp_executesql @SQLSTRING
【问题讨论】:
标签: sql-server tsql dynamic-sql