たとえば、私はテーブルを持っています
IPPARSED
127
0
0
1
テーブルをピボットして、このようになるようにする必要があります
1 2 3 4
127 0 0 1
どのように私を助けることができますか?
たとえば、私はテーブルを持っています
IPPARSED
127
0
0
1
テーブルをピボットして、このようになるようにする必要があります
1 2 3 4
127 0 0 1
どのように私を助けることができますか?
行が常にその順序であると仮定して、case ステートメントを使用してテーブルをピボットすることができます。
SELECT (case when (<condition to match first octet>) then IPPARSED else END) as 1,
(case when (<condition to match second octet>) then IPPARSED else END) as 2,
(case when (<condition to match third octet>) then IPPARSED else END) as 3,
(case when (<condition to match fourth octet>) then IPPARSED else END) as 4
FROM <insert_table_name_or_table_definition_here>
参照。Anthony Mollinaro のSQL クックブックpg 365。
編集: を思いつくのに問題がある<condition to match (...) octet>
場合は、何らかの形でテーブルに行番号を追加するクエリの結果に対して選択操作を行う必要があります。Oracle では、rownum 疑似列を使用しますが、SQL Server には存在しません。SQL Server 2005 では、ROW_NUMBER()
組み込み関数を列として使用したり、IDENTITY(...)
関数をそのクエリの列として使用したりできるようです。
私は羊シミュレーターの答えに同意しますが、あなたが私の答えにコメントしたように、テーブルにグループ化列がなく、複数のエントリがある場合、一致する条件を見つけるのは困難です。IP エントリが 1 つしかない場合 (つまり 4 行)、次のことができます。
編集: 最初のソリューション (lineID を使用) を使用して複数の IP エントリを解析できますが、DB に順次挿入する必要があります。
解析したIPが4行で出てくるのは変なことをしていると思います。行に直接解析するのは非常に簡単です。解析方法や入力形式を教えていただけないでしょうか?
こんにちは、テーブルに IP アドレスを集計する別の列がありませんか? 他のグループ列なしで、レコードごとに 1 つの整数のみを持つべきではありませんか? DBは何を使っていますか?