如何写CASE语句?
How to write a CASE statement?
我正在尝试编写一个简单的 case 语句,在有值的情况下连接两个字段,但默认为原始字段与另一个元素连接。
SELECT
RCDEA.data_element_ID,
RCDEA.answer_ID,
RCDEA.answer_text,
AA.name answer_name,
(
CASE
WHEN MM.export_value = 'MAYBACH' THEN CONCAT('S', "|", RCDEA.create_DTM)
WHEN MM.export_value = 'PICPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
WHEN MM.export_value = 'POCPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
ELSE CONCAT(MM.export_value, "|", RCDEA.create_DTM)
) AS poi_multi,
MM.export_value_2 AS mapping_export_value_2,
RCDEA.create_DTM,
CAST(DATE_FORMAT(RCDEA.create_DTM,"%m%d%Y") AS CHAR) AS source_date,
CAST(DATE_FORMAT(RCDEA.create_DTM,"%H%i%s") AS CHAR) AS source_time,
CASE
WHEN RCDEA.data_element_ID = 11177 THEN CAST(DATE_FORMAT(DATE_ADD(F.create_DTM, INTERVAL 180 DAY), "%m%d%Y") AS CHAR) ELSE '' END AS cert_expn_date_source,
F.event_token_ID
FROM efn.R_Consumer_Data_Element_Answer RCDEA
JOIN efn.Footprints F ON RCDEA.footprint_ID = F.footprint_ID
AND F.consumer_ID = RCDEA.consumer_ID
LEFT JOIN efn.Answers AA ON RCDEA.answer_ID = AA.answer_ID
LEFT JOIN kettle_data_transfer.Mappings MM ON RCDEA.data_element_ID = MM.data_element_ID AND RCDEA.answer_ID = MM.answer_ID
AND MM.data_transfer_ID = 12
您错过了 END
CASE
声明
....
(
CASE MM.export_value
WHEN 'MAYBACH' THEN CONCAT('S', "|", RCDEA.create_DTM)
WHEN 'PICPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
WHEN 'POCPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
ELSE CONCAT(MM.export_value, "|", RCDEA.create_DTM)
END
) AS poi_multi
....
完整查询应如下所示:
SELECT
RCDEA.data_element_ID,
RCDEA.answer_ID,
RCDEA.answer_text,
AA.name answer_name,
(
CASE MM.export_value
WHEN 'MAYBACH' THEN CONCAT('S', "|", RCDEA.create_DTM)
WHEN 'PICPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
WHEN 'POCPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
ELSE CONCAT(MM.export_value, "|", RCDEA.create_DTM)
END
) AS poi_multi,
MM.export_value_2 AS mapping_export_value_2,
RCDEA.create_DTM,
CAST(DATE_FORMAT(RCDEA.create_DTM,"%m%d%Y") AS CHAR) AS source_date,
CAST(DATE_FORMAT(RCDEA.create_DTM,"%H%i%s") AS CHAR) AS source_time,
CASE WHEN RCDEA.data_element_ID = 11177 THEN CAST(DATE_FORMAT(DATE_ADD(F.create_DTM, INTERVAL 180 DAY), "%m%d%Y") AS CHAR) ELSE '' END AS cert_expn_date_source,
F.event_token_ID
FROM efn.R_Consumer_Data_Element_Answer RCDEA
JOIN efn.Footprints F ON RCDEA.footprint_ID = F.footprint_ID
AND F.consumer_ID = RCDEA.consumer_ID
LEFT JOIN efn.Answers AA ON RCDEA.answer_ID = AA.answer_ID
LEFT JOIN kettle_data_transfer.Mappings MM ON RCDEA.data_element_ID = MM.data_element_ID AND RCDEA.answer_ID = MM.answer_ID
AND MM.data_transfer_ID = 12
从第一个 CASE
语句中删除大括号 () 并添加 END AS
.
SELECT
RCDEA.data_element_ID,
RCDEA.answer_ID,
RCDEA.answer_text,
AA.name answer_name,
CASE
WHEN MM.export_value = 'MAYBACH' THEN CONCAT('S', "|", RCDEA.create_DTM)
WHEN MM.export_value = 'PICPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
WHEN MM.export_value = 'POCPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
ELSE CONCAT(MM.export_value, "|", RCDEA.create_DTM)
END AS poi_multi,
MM.export_value_2 AS mapping_export_value_2,
RCDEA.create_DTM,
CAST(DATE_FORMAT(RCDEA.create_DTM,"%m%d%Y") AS CHAR) AS source_date,
CAST(DATE_FORMAT(RCDEA.create_DTM,"%H%i%s") AS CHAR) AS source_time,
CASE
WHEN RCDEA.data_element_ID = 11177 THEN CAST(DATE_FORMAT(DATE_ADD(F.create_DTM, INTERVAL 180 DAY), "%m%d%Y") AS CHAR) ELSE '' END AS cert_expn_date_source,
F.event_token_ID
FROM efn.R_Consumer_Data_Element_Answer RCDEA
JOIN efn.Footprints F ON RCDEA.footprint_ID = F.footprint_ID
AND F.consumer_ID = RCDEA.consumer_ID
LEFT JOIN efn.Answers AA ON RCDEA.answer_ID = AA.answer_ID
LEFT JOIN kettle_data_transfer.Mappings MM ON RCDEA.data_element_ID = MM.data_element_ID AND RCDEA.answer_ID = MM.answer_ID
AND MM.data_transfer_ID = 12
我正在尝试编写一个简单的 case 语句,在有值的情况下连接两个字段,但默认为原始字段与另一个元素连接。
SELECT
RCDEA.data_element_ID,
RCDEA.answer_ID,
RCDEA.answer_text,
AA.name answer_name,
(
CASE
WHEN MM.export_value = 'MAYBACH' THEN CONCAT('S', "|", RCDEA.create_DTM)
WHEN MM.export_value = 'PICPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
WHEN MM.export_value = 'POCPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
ELSE CONCAT(MM.export_value, "|", RCDEA.create_DTM)
) AS poi_multi,
MM.export_value_2 AS mapping_export_value_2,
RCDEA.create_DTM,
CAST(DATE_FORMAT(RCDEA.create_DTM,"%m%d%Y") AS CHAR) AS source_date,
CAST(DATE_FORMAT(RCDEA.create_DTM,"%H%i%s") AS CHAR) AS source_time,
CASE
WHEN RCDEA.data_element_ID = 11177 THEN CAST(DATE_FORMAT(DATE_ADD(F.create_DTM, INTERVAL 180 DAY), "%m%d%Y") AS CHAR) ELSE '' END AS cert_expn_date_source,
F.event_token_ID
FROM efn.R_Consumer_Data_Element_Answer RCDEA
JOIN efn.Footprints F ON RCDEA.footprint_ID = F.footprint_ID
AND F.consumer_ID = RCDEA.consumer_ID
LEFT JOIN efn.Answers AA ON RCDEA.answer_ID = AA.answer_ID
LEFT JOIN kettle_data_transfer.Mappings MM ON RCDEA.data_element_ID = MM.data_element_ID AND RCDEA.answer_ID = MM.answer_ID
AND MM.data_transfer_ID = 12
您错过了 END
CASE
声明
....
(
CASE MM.export_value
WHEN 'MAYBACH' THEN CONCAT('S', "|", RCDEA.create_DTM)
WHEN 'PICPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
WHEN 'POCPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
ELSE CONCAT(MM.export_value, "|", RCDEA.create_DTM)
END
) AS poi_multi
....
完整查询应如下所示:
SELECT
RCDEA.data_element_ID,
RCDEA.answer_ID,
RCDEA.answer_text,
AA.name answer_name,
(
CASE MM.export_value
WHEN 'MAYBACH' THEN CONCAT('S', "|", RCDEA.create_DTM)
WHEN 'PICPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
WHEN 'POCPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
ELSE CONCAT(MM.export_value, "|", RCDEA.create_DTM)
END
) AS poi_multi,
MM.export_value_2 AS mapping_export_value_2,
RCDEA.create_DTM,
CAST(DATE_FORMAT(RCDEA.create_DTM,"%m%d%Y") AS CHAR) AS source_date,
CAST(DATE_FORMAT(RCDEA.create_DTM,"%H%i%s") AS CHAR) AS source_time,
CASE WHEN RCDEA.data_element_ID = 11177 THEN CAST(DATE_FORMAT(DATE_ADD(F.create_DTM, INTERVAL 180 DAY), "%m%d%Y") AS CHAR) ELSE '' END AS cert_expn_date_source,
F.event_token_ID
FROM efn.R_Consumer_Data_Element_Answer RCDEA
JOIN efn.Footprints F ON RCDEA.footprint_ID = F.footprint_ID
AND F.consumer_ID = RCDEA.consumer_ID
LEFT JOIN efn.Answers AA ON RCDEA.answer_ID = AA.answer_ID
LEFT JOIN kettle_data_transfer.Mappings MM ON RCDEA.data_element_ID = MM.data_element_ID AND RCDEA.answer_ID = MM.answer_ID
AND MM.data_transfer_ID = 12
从第一个 CASE
语句中删除大括号 () 并添加 END AS
.
SELECT
RCDEA.data_element_ID,
RCDEA.answer_ID,
RCDEA.answer_text,
AA.name answer_name,
CASE
WHEN MM.export_value = 'MAYBACH' THEN CONCAT('S', "|", RCDEA.create_DTM)
WHEN MM.export_value = 'PICPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
WHEN MM.export_value = 'POCPE' THEN CONCAT('PACPE', "|", RCDEA.create_DTM)
ELSE CONCAT(MM.export_value, "|", RCDEA.create_DTM)
END AS poi_multi,
MM.export_value_2 AS mapping_export_value_2,
RCDEA.create_DTM,
CAST(DATE_FORMAT(RCDEA.create_DTM,"%m%d%Y") AS CHAR) AS source_date,
CAST(DATE_FORMAT(RCDEA.create_DTM,"%H%i%s") AS CHAR) AS source_time,
CASE
WHEN RCDEA.data_element_ID = 11177 THEN CAST(DATE_FORMAT(DATE_ADD(F.create_DTM, INTERVAL 180 DAY), "%m%d%Y") AS CHAR) ELSE '' END AS cert_expn_date_source,
F.event_token_ID
FROM efn.R_Consumer_Data_Element_Answer RCDEA
JOIN efn.Footprints F ON RCDEA.footprint_ID = F.footprint_ID
AND F.consumer_ID = RCDEA.consumer_ID
LEFT JOIN efn.Answers AA ON RCDEA.answer_ID = AA.answer_ID
LEFT JOIN kettle_data_transfer.Mappings MM ON RCDEA.data_element_ID = MM.data_element_ID AND RCDEA.answer_ID = MM.answer_ID
AND MM.data_transfer_ID = 12