http://msdn.microsoft.com/en-us/library/ms190276.aspxで演算子の優先順位を確認してください
「AND」は「OR」の前に評価されるため、例は次のようになります。
SELECT COUNT(col1)
FROM table
WHERE
LEN(col2) > 1 OR LEN(col3) > 1 OR ( LEN(col4) > 1 AND col1 = '1' )
それはかなりオープンな選択です。あなたが言った:
値のないレコードを数えたい
しかし、あなたのコードは値を持つレコードを数えています。だから多分あなたはこれが欲しい:
SELECT COUNT(col1)
FROM table
WHERE col1 = '1' AND
( col2 IS NULL
OR col3 IS NULL
OR col4 IS NULL
)
次のように言うと、値を持つデータを表示できます。
WHERE LEN(col2) > 0
ただし、col2 が NULL の場合、LEN(col2) も NULL です。ゼロではありません。
文字列が NULL ではなく '' の場合、LENgth を確認できます。
SELECT COUNT(col1)
FROM table
WHERE col1 = '1' AND
( LEN(col2) = 0
OR LEN(col3) = 0
OR LEN(col4) = 0
)
もちろん、空でない値を表示するつもりだった場合は、次のようになります。
SELECT COUNT(col1)
FROM table
WHERE col1 = '1' AND
( LEN(col2) > 0
OR LEN(col3) > 0
OR LEN(col4) > 0
)
また、あなたの例では、LEN() が > 1 であると言っていました。