diff --git a/Datatable/Column/AbstractColumn.php b/Datatable/Column/AbstractColumn.php
index 7da35c1c..e7e081d4 100644
--- a/Datatable/Column/AbstractColumn.php
+++ b/Datatable/Column/AbstractColumn.php
@@ -199,6 +199,14 @@ abstract class AbstractColumn implements ColumnInterface
      */
     protected $joinType;
 
+    /**
+     * Join conditions, if the column represents an association.
+     * Default: null
+     *
+     * @var null|string
+     */
+    protected $joinConditions;
+
     /**
      * The data type of the column.
      * Is set automatically in ColumnBuilder when 'null'.
@@ -321,6 +329,7 @@ public function configureOptions(OptionsResolver $resolver)
             'width' => null,
             'add_if' => null,
             'join_type' => 'leftJoin',
+            'join_conditions' => null,
             'type_of_field' => null,
             'responsive_priority' => null,
         ));
@@ -341,6 +350,7 @@ public function configureOptions(OptionsResolver $resolver)
         $resolver->setAllowedTypes('width', array('null', 'string'));
         $resolver->setAllowedTypes('add_if', array('null', 'Closure'));
         $resolver->setAllowedTypes('join_type', 'string');
+        $resolver->setAllowedTypes('join_conditions', array('null', 'string'));
         $resolver->setAllowedTypes('type_of_field', array('null', 'string'));
         $resolver->setAllowedTypes('responsive_priority', array('null', 'int'));
 
@@ -817,6 +827,30 @@ public function setJoinType($joinType)
         return $this;
     }
 
+    /**
+     * Get join conditions.
+     *
+     * @return string
+     */
+    public function getJoinConditions()
+    {
+        return $this->joinConditions;
+    }
+
+    /**
+     * Set join conditions.
+     *
+     * @param string $joinConditions
+     *
+     * @return $this
+     */
+    public function setJoinConditions($joinConditions = null)
+    {
+        $this->joinConditions = $joinConditions;
+
+        return $this;
+    }
+
     /**
      * Get type of field.
      *
diff --git a/Resources/doc/columns.md b/Resources/doc/columns.md
index 10578300..ee415052 100644
--- a/Resources/doc/columns.md
+++ b/Resources/doc/columns.md
@@ -43,6 +43,7 @@ With 'null' initialized options uses the default value of the DataTables plugin.
 | width               | null or string     | null              |          | Column width assignment. |
 | add_if              | null or Closure    | null              |          | Add column only if conditions are TRUE. |
 | join_type           | string             | 'leftJoin'        |          | Join type (default: 'leftJoin'), if the column represents an association. |
+| join_conditions     | null or string     | null              |          | Join conditions (using WITH), if the column represents an association. |
 | type_of_field       | null or string     | null (autodetect) |          | Set the data type itself for ordering (example: integer instead string). |
 | responsive_priority | null or int        | null              |          | Set column's visibility priority. Requires the Responsive extension. |
 | filter              | array              | TextFilter        |          | A Filter instance for individual filtering. |
@@ -117,6 +118,7 @@ $this->columnBuilder
         'data' => 'comments[,].title',
         'searchable' => true,
         'orderable' => true,
+        'join_conditions' => 'comments.reviewed = 1',
     ))
 ;
 ```
diff --git a/Response/DatatableQueryBuilder.php b/Response/DatatableQueryBuilder.php
index ee2c5fca..1c9f38a9 100644
--- a/Response/DatatableQueryBuilder.php
+++ b/Response/DatatableQueryBuilder.php
@@ -255,6 +255,7 @@ private function initColumnArrays()
                 $this->addSearchColumn($column, null, $searchDql);
             } elseif (true === $this->accessor->getValue($column, 'selectColumn')) {
                 $parts = explode('.', $dql);
+                $withExpr = $this->accessor->getValue($column, 'joinConditions');
 
                 while (count($parts) > 1) {
                     $previousPart = $currentPart;
@@ -263,8 +264,14 @@ private function initColumnArrays()
                     $currentPart = array_shift($parts);
                     $currentAlias = ($previousPart === $this->entityShortName ? '' : $previousPart.'_').$currentPart;
 
-                    if (!array_key_exists($previousAlias.'.'.$currentPart, $this->joins)) {
-                        $this->addJoin($previousAlias.'.'.$currentPart, $currentAlias, $this->accessor->getValue($column, 'joinType'));
+                    $columnTableName = $previousAlias.'.'.$currentPart;
+                    if (!array_key_exists($columnTableName, $this->joins)) {
+                        $this->addJoin($columnTableName, $currentAlias, $this->accessor->getValue($column, 'joinType'));
+                    }
+                    // for the last dql part join using WITH, if expression is given for column
+                    if (count($parts) === 1 && array_key_exists($columnTableName, $this->joins) && null !== $withExpr) {
+                        $with = str_replace($currentPart . '.', $currentAlias . '.', $withExpr);
+                        $this->addJoin($columnTableName, $currentAlias, $this->accessor->getValue($column, 'joinType'), $with);
                     }
 
                     $metadata = $this->setIdentifierFromAssociation($currentAlias, $currentPart, $metadata);
@@ -395,7 +402,11 @@ private function setSelectFrom(QueryBuilder $qb)
     private function setJoins(QueryBuilder $qb)
     {
         foreach ($this->joins as $key => $value) {
-            $qb->{$value['type']}($key, $value['alias']);
+            if (\array_key_exists('with', $value) && null !== $value['with']) {
+                $qb->{$value['type']}($key, $value['alias'], Query\Expr\Join::WITH, $value['with']);
+            } else {
+                $qb->{$value['type']}($key, $value['alias']);
+            }
         }
 
         return $this;
@@ -723,14 +734,16 @@ private function addSearchOrderColumn($column, $columnTableName, $data)
      * @param string $columnTableName
      * @param string $alias
      * @param string $type
+     * @param string $with
      *
      * @return $this
      */
-    private function addJoin($columnTableName, $alias, $type)
+    private function addJoin($columnTableName, $alias, $type, $with = null)
     {
         $this->joins[$columnTableName] = array(
             'alias' => $alias,
             'type' => $type,
+            'with' => $with,
         );
 
         return $this;