web-dev-qa-db-ja.com

Query Select Where is null not vs <> ''適切にフィルタリングされていません

私はクエリに問題があり、数値セルとテキストセルがあり、すべてが空の場合は取得したくないが、セルのいずれかが空でない場合はその行を取得したい。

is not Nullは数値セルに使用され、<>''はテキストセルに使用されることを知っています。

例えば:

元のデータテーブルでは、テーブルは次のようになっているとします。シートは「データ」と呼ばれます。

             Column    |   A    |   B   |  C     |  D    |
             Cell Type | Number | Text  | Number | Text  |
             Row1      |  7     | Stuff |  5.33  | Sweet |
             Row2      |  8     | World |        | Hello |
             Row3      |  9     |       |        |       |
             Row4      |        |       |        |       |
             Row5      |        |       |  9.77  |       |

Row4以外のすべての行を取得できるようにしたい

このクエリを使用すると、セルタイプで正しく機能するはずです。正しい?

=Query(Data!A:D, Select D,B,A,C Where A Is Not Null OR B <>'' OR C Is Not Null OR D <>'')

このクエリと同じ原理を使用するスプレッドシートの例にこれを適用しました。それは私のシートの2つでのみ動作することを除いて。選択するデータがあまりないシート。クエリはヘッダーのみを取得します。私の考えでは、DonSmithPoolと呼ばれる2番目のタブについては、テキストコメントのある行のいくつかを取得する必要があり、TeachPoolと呼ばれる最後のタブについては1行を取得する必要があります。

スプレッドシートの例

4
CamSyl

クエリはヘッダーのみを取得します。

いいえ、いくつかの行も取得します。下にスクロールします。そこにあります。あなたがこれを打っている理由はここにあります。

  1. 一部の列は完全に空です。これらはデフォルトでstringと解釈されます。したがって、is not nullはこれらに対して常に真であり、テーブル全体を取得します。
  2. B(デフォルトでは昇順)で注文するため、空の行が膨大な数になり、最終的にクエリは何も返さないと結論付けられます。

残念ながら、空の列の型を宣言する方法はないようです。これは、「文字列列にnullがない」動作と組み合わされて、人々につながります null以外に夢中になる

あなたの正気を保つために、

  • すべての列に少なくとも1つの空でないセルがあり、その列に期待するタイプの値があることを確認してください。
  • または、タスクに十分な場合は、それほど強力ではないが、より単純な filter コマンドを使用します。フィルターの出力をクエリに入力して、両方の最適な機能を組み合わせることができます。
5
user79865