2

たとえば、私はテーブルを持っています

IPPARSED
127
0
0
1

テーブルをピボットして、このようになるようにする必要があります

1 2 3 4
127 0 0 1

どのように私を助けることができますか?

4

4 に答える 4

2

行が常にその順序であると仮定して、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(...)関数をそのクエリの列として使用したりできるようです。

于 2009-03-23T22:09:52.907 に答える
1

私は羊シミュレーターの答えに同意しますが、あなたが私の答えにコメントしたように、テーブルにグループ化列がなく、複数のエントリがある場合、一致する条件を見つけるのは困難です。IP エントリが 1 つしかない場合 (つまり 4 行)、次のことができます。

  • lineID (Oracle では rownum) を使用してグループ化します
  • 4行を解析してください;-)

編集: 最初のソリューション (lineID を使用) を使用して複数の IP エントリを解析できますが、DB に順次挿入する必要があります。

于 2009-03-23T22:20:31.150 に答える
1

解析したIPが4行で出てくるのは変なことをしていると思います。行に直接解析するのは非常に簡単です。解析方法や入力形式を教えていただけないでしょうか?

于 2009-03-23T22:10:23.703 に答える
1

こんにちは、テーブルに IP アドレスを集計する別の列がありませんか? 他のグループ列なしで、レコードごとに 1 つの整数のみを持つべきではありませんか? DBは何を使っていますか?

于 2009-03-23T21:56:12.190 に答える