2

抱歉缺少信息——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

这为我提供了我需要对其执行操作的行——但我只是无法获得正确的语法来对这些数据进行 UNPIVOTing 并将其转换为我的插入。

4

1 回答 1

3

您可以通过使用 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 列不是相同的数据类型,您可能必须将一个或两个强制转换为相同的。

于 2013-03-19T14:01:05.417 回答