sqlcoldfusionqoq

Coldfusion Query of Queries with Empty Strings


The query I start out with has 40,000 lines of empty rows, which stems from a problem with the original spreadsheet from which it was taken.

Using CF16 server

I would like to do a Query of Queries on a variably named 'key column'.

In my query:

var keyColumn = "Permit No."

var newQuery = "select * from source where (cast('#keyColumn#' as varchar) <> '')";

Note: the casting comes from this suggestion

I still get all those empty fields in there.

But when I use "City" as the keyColumn, it works. How do the values in both those columns differ when they both say [empty string] on the query dump?

output comparison with both query of queries

Is it a problem with column names? What kind of data are in those cells?


Solution

  • where ( cast('Permit No.' as varchar) <> '' )

    The problem is the SQL, not the values. By enclosing the column name in quotes, you are actually comparing the literal string "P-e-r-m-i-t N-o-.", not the values inside that column. Since the string "Permit No." can never equal an empty string, the comparison always returns true. That is why the resulting query still includes all rows.

    Unless it was fixed in ColdFusion 2016, QoQ's do not support column names containing invalid characters like spaces. One workaround is to use the "columnNames" attribute to specify valid column names when reading the spreadsheet. Failing that, another option is to take advantage of the fact that query columns are arrays and duplicate the data under a valid column name: queryAddColumn(yourQuery, "PermitNo", yourQuery["Permit No."]) (Though the latter option is less ideal because it may require copying the underlying data internally):