我正在使用PostgreSQL将数据从一个表转换到另一个表,并且目前在布尔列方面遇到了一些挑战。我想将具有布尔值的表转换为单个分号分隔的varchar字段。
以下是我正在执行的两个CREATE TABLE语句。
以下是我正在执行的两个CREATE TABLE语句。
CREATE TABLE Color_Table
(
"Id" VARCHAR(255),
"IsRed" BOOL,
"IsOrange" BOOL,
"IsYellow" BOOL,
"IsGreen" BOOL,
"IsBlue" BOOL,
"IsIndigo" BOOL,
"IsViolet" BOOL
)
CREATE TABLE Concatenated_Table
(
"Id" VARCHAR(255),
"Semicolon_Colors" VARCHAR(255)
)
这是我要插入Color_Table中的一行示例。我的期望是将其转换为:红色; 绿色; 靛蓝色; 紫罗兰色;
INSERT INTO Color_Table
(
"Id",
"IsRed",
"IsOrange",
"IsYellow",
"IsGreen",
"IsBlue",
"IsIndigo",
"IsViolet"
)
VALUES
(
'12345_abcd_67890',
true,
false,
false,
true,
false,
true,
true
)
我试图通过声明临时变量来创建它,但是收到了错误消息。下面是我尝试使用的脚本/方法。
DECLARE TempVariable VARCHAR(255);
INSERT INTO Concatenated_Table
(
"Id",
"Semicolon_Colors"
)
SELECT
colors."Id",
BEGIN
TempVariable = ''
IF(colors."IsRed" = true)
BEGIN
CONCAT(TempVariable, 'Red; ')
END
IF(colors."IsOrange" = true)
BEGIN
CONCAT(TempVariable, 'Orange; ')
END
IF(colors."IsYellow" = true)
BEGIN
CONCAT(TempVariable, 'Yellow; ')
END
IF(colors."IsGreen" = true)
BEGIN
CONCAT(TempVariable, 'Green; ')
END
IF(colors."IsBlue" = true)
BEGIN
CONCAT(TempVariable, 'Blue; ')
END
IF(colors."IsIndigo" = true)
BEGIN
CONCAT(TempVariable, 'Indigo; ')
END
IF(colors."IsViolet" = true)
BEGIN
CONCAT(TempVariable, 'Violet; ')
END
END
FROM Color_Table colors
非常感谢您对如何实现这一点提供任何建议!