```
SELECT *
FROM xrollup

Query id: e702f6fe-8595-4a9f-aeff-ea65e2045801

┌─metric─┬──────────b─┬─v─┐
│      2 │ 2018-01-01 │ 1 │
│      2 │ 2018-02-02 │ 1 │
└────────┴────────────┴───┘
┌─metric─┬──────────b─┬─v─┐
│      1 │ 2018-01-01 │ 1 │
│      1 │ 2018-01-02 │ 1 │
│      1 │ 2018-02-01 │ 1 │
│      1 │ 2017-03-01 │ 1 │
└────────┴────────────┴───┘

6 rows in set. Elapsed: 0.004 sec.
```

`WITH TOTALS + WITH FILL:`

```
SELECT
    b,
    sum(v)
FROM xrollup
GROUP BY b
    WITH TOTALS
ORDER BY b DESC WITH FILL
LIMIT 5

Query id: ae21086d-eb89-4b73-b9be-7baa4c0cee27

┌──────────b─┬─sum(v)─┐
│ 2018-02-02 │      1 │
│ 2018-02-01 │      1 │
│ 2018-01-31 │      0 │
│ 2018-01-30 │      0 │
│ 2018-01-29 │      0 │
└────────────┴────────┘

Totals:
┌──────────b─┬─sum(v)─┐
│ 1970-01-01 │      6 │
└────────────┴────────┘

5 rows in set. Elapsed: 0.003 sec.
```

`WITH TOTALS + WITH FILL FROM:`

```
SELECT
    b,
    sum(v)
FROM xrollup
GROUP BY b
    WITH TOTALS
ORDER BY b DESC WITH FILL FROM today()
LIMIT 5

Query id: cbf3d659-cf10-4b3b-800f-a5af11fc9faa

┌──────────b─┬─sum(v)─┐
│ 2021-02-18 │      0 │
│ 2021-02-17 │      0 │
│ 2021-02-16 │      0 │
│ 2021-02-15 │      0 │
│ 2021-02-14 │      0 │
└────────────┴────────┘

Totals:
┌──────────b─┬─sum(v)─┐
│ 2021-02-18 │      0 │
└────────────┴────────┘

5 rows in set. Elapsed: 0.006 sec.
```

#include <Processors/Transforms/FillingTransform.h>
#include <Interpreters/convertFieldToType.h>
#include <DataTypes/DataTypesNumber.h>
#include <DataTypes/DataTypeDateTime64.h>
#include <DataTypes/IDataType.h>
#include <Core/Types.h>
#include <DataTypes/DataTypesDecimal.h>
namespace DB
{
namespace ErrorCodes
{
    extern const int INVALID_WITH_FILL_EXPRESSION;
}
Block FillingTransform::transformHeader(Block header, const SortDescription & sort_description)
{
    NameSet sort_keys;
    for (const auto & key : sort_description)
        sort_keys.insert(key.column_name);
    
    for (auto & column : header)
        if (column.column && isColumnConst(*column.column) && !sort_keys.count(column.name))
            column.column = column.type->createColumn();
    return header;
}
FillingTransform::FillingTransform(