我在Postgresql中有以下表格:
sch_code sch_level start_date end_date flag
1234 P 01-01-2018 31-01-2018 V
1234 S 01-01-2018 31-01-2018 V
5678 S 01-01-2018 31-01-2018 V
8965 P 01-01-2018 31-01-2018 V
我要求的结果如下。
sch_code start_P end_P start_S end_S
1234 01-01-2018 31-01-2018 01-01-2018 31-01-2018
5678 00-00-0000 00-00-0000 01-01-2018 31-01-2018
8965 01-01-2018 31-01-2018 00-00-0000 00-00-0000
我尝试使用UNION
的查询未提供结果。我也尝试过使用循环选择语句。
答案 0 :(得分:0)
您需要FULL OUTER JOIN
(see guide here)
由于潜在WHERE
值导致您无法使用NULL
过滤器,因此您必须使用CTE
s(see guide here)预过滤2个数据集
WITH pdata AS (
SELECT * FROM mytable WHERE sch_level='P'
),
sdata AS (
SELECT * FROM mytable WHERE sch_level='S'
)
SELECT
COALESCE(pdata.sch_code, sdata.sch_code) AS sch_code,
pdata.start_date AS start_P,
pdata.end_date AS end_P,
sdata.start_date AS start_S,
pdata.end_date AS end_S
FROM pdata
FULL OUTER JOIN sdata ON pdata.sch_code = sdata.sch_code
如果您不想在日期字段中显示NULL
值,只需使用COALESCE
并在您可能使用的任何数据类型中提供默认值。