2016-11-22 8 views
0

私は大量の列を持つテーブルを持っています。私がそうすると、多くのことがあります。SELECT *すべての列が画面いっぱいになっているので、値が表示されません。私は次のようなことをしたい:Oracleから既存の値のみを選択する方法は?

SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND <THIS COLUMN> IS NOT NULL 

これは可能ですか? 注:VALUEは列ではありません。

あり、この同じ質問をsomanyquestionson SOがありますが、それらはいくつかの奇妙なねじれを持っており、実際の質問が回答されていません。

私が試してみた:

SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND VALUE NOT NULL 
                    * 
Invalid relational operator 

SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND VALUE <> '' 
                  * 
'VALUE': invalid identifier 

SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND COLUMN NOT NULL 
                  * 
Missing Expression 

ボーナス質問:

  1. は、一度に1つの出力画面を表示するには、Oracleを強制する方法はありますか?
  2. 現在の列に関連するWHERE句に使用する変数はありますか?そのような:WHERE this.column = '1'、それはその式に一致するように各列をチェックするか?
  3. Oracleで最後のコマンドを取得する方法はありますか? (私は、Oracleを走らせているLinuxボックスに遠隔操作しなければならない。それはコマンドラインだから、コピー/ペーストすることさえできない。すべてのコマンドを手間をかけずに入力する必要がある。だから、これをデバッグするのに、もの)
+1

より頻繁な列のビューのいくつかを作成することができます。 – scaisEdge

+0

私があなたが探しているものを理解しているかどうかはわかりません。この例の 'my_table'は' name'カラムと 'value'カラムを持つテーブルですか?または、あなたが 'name'がテーブルの各列の名前で、' value'がその列の値である何かをしようとしていますか?だから私は数百の列を持つテーブルを持っている場合、私は読みたい列を動的に選んでいて、それらの列の少なくとも1つが非NULL値を持つ行だけを表示していますか? –

+0

'VALUE'は**ではなく**列です。 'NAME'は列です。 LIKE式の名前は、一行だけを返すだけの固有の名前です。しかし、それはあまりにも多くの列を返す、彼らは値を表示せずに画面全体を埋める。 –

答えて

0

これを試してみましたか?行番号の場合

SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND value IS NOT NULL; 

Oracle/PLSQL: IS NOT NULL Condition

SELECT field1, field2, ROW_NUMBER() OVER (PARTITION BY unique_field) R WHERE R=1; 

通常のLinuxコンソールにあなたが最後の文を繰り返すようにダウン&を矢印使用することができます。上記のコードはnullで

SELECT * 
    FROM (select * from my_table where name like '%unique value%') 
UNPIVOT [include nulls] (col_value FOR col_name IN (col1, col2, ..., coln)) 

:あなたは、特定のレコードのすべての非NULL列値を見つけようとしている場合は

+0

Linuxコンソールはアップ/ダウンを使用しますが、Oracleは使用しません。それは上向き矢印のキーボード表現をペーストしています。これは '[[^ A'のようなものです。 –

+0

また、 'value'は列ではありません。私は単に私が探しているものを実証するためにそれを示していました。 –

+0

私は、NULL以外の値のためのOracleの構文は: 'IS NOT NULL'、 – McNets

2

あなたが同じデータ型を持つアンピボットされているすべての列を提供するアンピボットを試みることができますオプションのinclude nullsステートメントを含まないかぎり、値は除外されます。また、アンピボットされる各列を明示的にリストする必要があります。

彼らはすべてのない同じデータ型を持っている場合は、必ずしもすべてのnull値を離れて剪定しないバリエーションを使用することができます:あなたが列グループのかなり大規模なセットを持つことができ

select * 
    from (select * from my_table where name like '%unique value%') 
    unpivot ((str_val, num_val, date_val) 
    for col_name in ((cola, col1, date1) 
        ,(colb, col2, date2) 
        ,(colc, col3, date1))); 

ここでは、主要なデータタイプごとに3つずつ表示していますが、INリストを使用すると、列グループの各列に列がリストされている必要がありますが、date_val列のように列を再利用できます。日付1を2回使用しました。既存の列を再利用する代わりに、ヌル値のダミー列を使用することもできます。

select * 
    from (select t1.*, null dummy from my_table t1 where name like '%unique value%') 
    unpivot ((str_val, num_val, date_val) 
    for col_name in ((dummy, col1, date1) 
        ,(colb, dummy, date2) 
        ,(colc, col3, dummy))); 
+0

残念ながら、列にはさまざまな種類があります。 –

関連する問題