gpt4 book ai didi

SQL 逆透视和插入

转载 作者:行者123 更新时间:2023-12-04 05:06:21 25 4
gpt4 key购买 nike

抱歉缺少信息——SQL Server 2008。

我正在努力将表 A 中的几个列值放入表 B 中的新行中,以便 A 中的每一行都不为空。

表A的结构如下:

UserID | ClientUserID | ClientSessionID | [and a load of other irrelevant columns)

表 B:
UserID | Name | Value

我想在表 B 中为 A 中的每个非空 ClientUserID 或 ClientSessionID 创建行 - 使用列名作为 B 的“名称”,使用列值作为“B 的值”。

我正在努力编写我的“unpivot”语句 - 只是让语法正确!我正在尝试跟随一些示例,但不能

到目前为止,这是我的 SQL 查询 - 任何进一步的帮助将不胜感激(仅获得此 SELECT 就让我感到沮丧,更不用说进行插入了!)
SELECT UserID, ClientUserID, ClientSessionID FROM websiteuser WHERE ClientSessionID IS NOT null

这为我提供了需要对其执行操作的行 - 但我无法获得正确的语法来取消透视此数据并将其转换为我的插入。

最佳答案

您可以使用 UNION 以这种方式取消透视记录以获取每个新行:

INSERT INTO TableB (UserID, Name, Value)
SELECT UserID, 'ClientUserID' AS Name, ClientUserID AS Value
FROM TableA
WHERE ClientUserID IS NOT NULL
UNION ALL
SELECT UserID, 'ClientSessionID' AS Name, ClientSessionID AS Value
FROM TableA
WHERE ClientSessionID IS NOT NULL

我正在使用 UNION ALL在这种情况下为 UNION意味着 DISTINCT整个集合中的操作,这在旋转唯一记录时通常是不必要的。

如果您的 ClientUserID 和 ClientSessionID 列不是相同的数据类型,您可能必须将其中一个或两个强制转换为相同的数据类型。

关于SQL 逆透视和插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15501296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com