I have a table like this:
| Column A | Column B |
|---|---|
| A | -1 |
| B | 4 |
| C | -10 |
| D | -68 |
| E | 51 |
| F | 2 |
I have to create a materialized view in SQL with a new varchar column containing the column B value with a symbol added when the value is positive. I want a result like:
| Column A | Column B | Column C |
|---|---|---|
| A | -1 | -1 |
| B | 4 | 4 |
| C | -10 | -10 |
| D | -68 | -68 |
| E | 51 | 51 |
| F | 2 | 2 |
I tried the following but this adds a symbol before all values:
CREATE MATERIALIZED VIEW schema.view
as
select column a, column b, CONCAT(' ', column b) AS column c
from schema.table;
CodePudding user response:
You can use a CASE statement to add the positive sign only if there isn't already a negative sign. Something like:
CREATE MATERIALIZED VIEW schema.view
as
select columna, columnb, CASE WHEN columnb NOT LIKE '-%' THEN CONCAT(' ', columnb) ELSE columnb END columnc
from schema.table;
However, I would suggest revisiting whether this is actually necessary for your actual scenario. This seems like something trivial to calculate on the fly. Typically I would expect a materialized view to be used when the calculations are complex and there are performance gains that justify the duplication and wasted space. Maybe you could use a regular view or a generated column instead.
