1

anotes次のデータで呼び出されるSQL Server 2014のテーブルがあります

ここに画像の説明を入力

このデータを final という名前の別のテーブルに追加したい

ID      Notes      NoteDate

ファイナルテーブルの列にtext1, text2, text3, text4入り、列に入る。NotesNotedate1,notedate2,notedate3,notedate4Notedate

最初にメモを使用してデータのピボットを解除しようとしました:

select createdid, temp
from (select createdid,text1,text2,text3,text4 from anotes) p
unpivot
(temp for note in(text1,text2,text3,text4)) as unpvt
order by createdid

適切な結果が得られました:

ここに画像の説明を入力

次に、日付部分に別のピボット解除クエリを使用しました。

select createdid,temp2
from (select createdid,notedate1,notedate2,notedate3,notedate4 from anotes) p
unpivot (temp2 for notedate in(notedate1,notedate2,notedate3,notedate4)) as unpvt2

また、適切な結果が得られます。

ここに画像の説明を入力

ここで、このデータを最終テーブルに追加したいと思います。

次のクエリを試してみたところ、クロス結合になります:(

select a.createdid, a.temp, b.temp2
from (select createdid, temp
      from (select createdid,text1,text2,text3,text4 from anotes) p
      unpivot
      (temp for note in(text1,text2,text3,text4)) as unpvt) a inner join (select createdid,temp2
from (select createdid,notedate1,notedate2,notedate3,notedate4 from anotes) p
unpivot (temp2 for notedate in(notedate1,notedate2,notedate3,notedate4)) as unpvt) b on a.createdid=b.createdid

出力は次のとおりです。

ここに画像の説明を入力

両方の列を同時にアンピボットする方法はありますか?

または、2 つの選択クエリを使用して、そのデータを最終テーブルに追加しますか?

前もって感謝します!

4

3 に答える 3

0

上記の@AHigginsのリンクを使用

以下は私の最後のクエリです!

select createdid,temp,temp2
from (select createdid,text1,text2,text3,text4,text5,text6,text7,notedate1,notedate2,notedate3,notedate4,notedate5,notedate6,notedate7 from anotes) main
      unpivot
      (temp for notes in(text1,text2,text3,text4,text5,text6,text7)) notes
unpivot (temp2 for notedate in(notedate1,notedate2,notedate3,notedate4,notedate5,notedate6,notedate7)) Dates
where RIGHT(notes,1)=RIGHT(notedate,1)
于 2014-06-05T16:31:15.277 に答える
0

各クエリをテーブルとして扱い、createdid と fieldid (フィールド名の数値部分) に基づいてそれらを結合します。

select x.createdid, x.textValue, y.dateValue
from
(
    select createdid, substring(note, 5, len(note)) fieldId, textValue
    from (select createdid,text1,text2,text3,text4 from anotes) p
    unpivot
    (textValue for note in(text1,text2,text3,text4)) as unpvt
)x
join
(
    select createdid, substring(notedate, 9, len(notedate)) fieldId, dateValue
    from (select createdid,notedate1,notedate2,notedate3,notedate4 from anotes) p
    unpivot (dateValue for notedate in(notedate1,notedate2,notedate3,notedate4)) as unpvt2
) y on x.fieldId = y.fieldId and x.createdid = y.createdid
order by x.createdid, x.fieldId

列が多すぎて、フィールド名の右端の番号が重複している場合 (例: text1 と text11)、他の回答は機能しません。

于 2014-06-05T16:46:43.520 に答える