Submitting form using dynamic variable with query
A few things you could do to simplify the code:


Rather than examining every form field to determine if the form was submitted, a single check of say - the submit button - should suffice for most purposes. 
Avoid using strings like "ALL" or "Choose:" for the form field values. Those are fine for display purposes, but the field values should be something more generic, like an empty string. That makes for simpler, more uniform, validation code. 

For example, if the default is an empty string, a simple LEN() check is all you need to determine if a particular field was populated. (You can also use other boolean functions like IsNumeric or IsDate, when more appropriate).
Consider using cfparam to assign a default for all fields (except the submit button). That ensures the fields always exist, eliminating the need to use structKeyExists every time you access a field.
With the above changes, you could also simplify the WHERE clause logic. Start with an expression that is always true. Then add additional filters based on which form fields were populated. 

NB: Using raw client supplied values in a queries puts your database at risk for sql injection. Always use cfqueryparam on all parameters. (I do not know the data types of your database columns, so modify the cfsqltype's as needed.)

&lt;cfparam name="FORM.category_time" default=""&gt;
&lt;cfparam name="FORM.date_month" default=""&gt;
...

&lt;cfif structKeyExists(FORM, "submit")&gt;

    &lt;cfquery ....&gt;
        SELECT Column1, Column2, ....
        FROM   work_timeline
        WHERE  1 = 1 

        &lt;!--- Filter on FORM.category_time when populated  ---&gt;
        &lt;cfif LEN(FORM.category_time)&gt;
            AND category_time = &lt;cfqueryparam value="#FORM.category_time#" cfsqltype="cf_sql_integer"&gt;
        &lt;/cfif&gt;

        &lt;!--- Filter on FORM.date_month when populated ---&gt;
        &lt;cfif LEN(FORM.date_month)&gt;
            AND month(date_time) = &lt;cfqueryparam value="#FORM.date_month#" cfsqltype="cf_sql_integer"&gt;
        &lt;/cfif&gt;

        ... more cfif conditions
    &lt;/cfquery&gt;
&lt;/cfif&gt;





As an aside, regarding SQL


There is nothing technically wrong with using SELECT *, but in most cases it is preferable to supply a list of the columns you need. It makes the code a more readable, and also helps avoid pulling back extra data columns that are never used.
Using functions on an indexed database column usually prevents the database from utilizing the index. While it may not be feasible for your current query, when possible it is best to revise expressions like this:

WHERE month(column) = 12 AND year(column) = 2015


.. to use a more index friendly expression instead. For example:

   WHERE column &gt;= '2015-12-01' -- Begin date at midnight       
   AND   column &lt;  '2016-01-01' -- Day AFTER end date at midnight