これは私にとってトリッキーです...
私はMicrosoftSQLServer 2008で作業しており、個人名を含むテーブルがあります。人の名前は時間の経過とともに変更された可能性があるため、履歴情報もあります。
例:
PID Sequence Name
1 0 Michael Hansen
2 0 Ulla Hansen
2 94 Ulla Margrethe Hansen
2 95 Ulla Margrethe Jensen
3 0 Daniella Oldfield
3 95 Daniella Quist
(私はこのテーブルを作成していません-そのため、データの保存方法を変更することはできません)。PID1の人はマイケルハンセンと呼ばれます。これは彼の現在の名前であり(シーケンス0は常に現在の名前を指定しています)、他のレコードがないため、彼は常にMichaelHansenという名前になっています。
Person PID 2は現在、Ulla Hansen(シーケンス0)と呼ばれています。その前に彼女はUllaMargretheHansenと呼ばれ(これは次のシーケンス番号であるため)、その前に再びUllaMargretheJensenと呼ばれていました。
このテーブルについて私が知っているのは、現在の名前は常にシーケンス0であるということです。また、2つの名前があった場合、次のシーケンスは95です。3つの履歴名:現在の名前:シーケンス0、そのシーケンス94の前と最も古い名前95。
そして、私のデータベースには、最大6つの履歴名(シーケンス0、91、92、93、94、95)に関する情報が含まれています。
今、私は新しいテーブルにすべての名前をリストするように言われました。
PID Name1 Name2 Name3
1 Michael Hansen
2 Ulla Hansen Ulla Margrethe Hansen Ulla Margrethe Jensen
3 Daniella Oldfield Daniella Quist
これまでのところ、ほぼ機能する次のSQLがあります。
SELECT PID
,MAX(CASE sequence WHEN 0 THEN Name ELSE '' END) AS Name1
,MAX(CASE sequence WHEN 91 THEN Name ELSE '' END) AS Name2
,MAX(CASE sequence WHEN 92 THEN Name ELSE '' END) AS Name3
,MAX(CASE sequence WHEN 93 THEN Name ELSE '' END) AS Name4
,MAX(CASE sequence WHEN 94 THEN Name ELSE '' END) AS Name5
,MAX(CASE sequence WHEN 95 THEN Name ELSE '' END) AS Name6
FROM tblShipTypeHistory
GROUP BY PID
PIDごとに1行で必要なすべての名前が表示されます。また、現在の名前も常にName1の下に表示されます。問題は、2番目に新しい名前をName2列などに含める必要があることです。私の場合は(もちろん)、人が6つの名前を持っている場合にのみ機能します。
したがって、私が行う必要があるのは、PIDが実際に持っている名前の数に基づいて、列Name2からName6に動的に名前を付けることです。そこで、(DECLARE @SQL AS NVARCHAR(MAX)のように動的にSQLを構築してから、@ SQL =を上記のSQLの例に設定してみました)。それから私は次のようなことを試みました
SET @SQL = 'SELECT ....
,MAX(CASE sequence WHEN 91 THEN Name ELSE '' END) AS Name' + COUNT(PID) - 4 + '
,MAX(CASE sequence WHEN 92 THEN Name ELSE '' END) AS Name' + COUNT(PID) - 3 + '
,MAX(CASE sequence WHEN 93 THEN Name ELSE '' END) AS Name' + COUNT(PID) - 2 + '
,MAX(CASE sequence WHEN 94 THEN Name ELSE '' END) AS Name' + COUNT(PID) - 1 + '
,MAX(CASE sequence WHEN 95 THEN Name ELSE '' END) AS Name' + COUNT(PID) + '
論理的にはこれは機能しますが(正しい列名が付けられます)、残念ながら構文「+ count(PID)」は機能しません。
(ふぅ!)それで、これに対する解決策を持っている人はいますか?
前もって感謝します。