2

情報が不足して申し訳ありません-SQLServer2008。

列がnullではないAの各行について、テーブルAからテーブルBの新しい行にいくつかの列値を取得するのに苦労しています。

表Aの構造は次のとおりです。

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

表B:

UserID | Name | Value

Aのnull以外のClientUserIDまたはClientSessionIDごとにテーブルBに行を作成したいのですが、列名をBの「名前」、列の値を「Bの値」として使用します。

「unpivot」ステートメントを書くのに苦労しています-構文を正しくするだけです!私はいくつかのサンプルをフォローしようとしていますが、できません

これまでの私のSQLクエリは次のとおりです-さらに助けていただければ幸いです(挿入を行うことは言うまでもなく、このSELECTを取得するだけでイライラします!)

SELECT UserID, ClientUserID, ClientSessionID FROM websiteuser WHERE ClientSessionID IS NOT null

これにより、アクションを実行する必要のある行が得られますが、このデータをUNPIVOTして挿入に変換するための正しい構文を取得できません。

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 に答える