您好我使用左连接从各种表中选择了以下列,我得到以下结果。
Box_ID BOX_NAME VALUE PROM_EFFDATE PROM_CLOSEDATE
11 JE 1 115 2/27/2014
11 JE 2 80 2/27/2014 3/6/2014
11 JE 4 60 2/17/2014
11 JE 3
如果PROM_CLOSEDATE有一些值,则应该再次显示等效的BOX_NAME(JE2),并显示空值和null effdate。我们可以为不同的周期时间输入任何其他不同的值。 这是实际要求。结果应该是:
Box_ID BOX_NAME VALUE PROM_EFFDATE PROM_CLOSEDATE
11 JE 1 115 2/27/2014
11 JE 2 80 2/27/2014 3/6/2014
11 JE 2
11 JE 4 60 2/17/2014
11 JE 3
就像我必须得到的价值。
这里我按照san的指导使用了
SELECT Box_ID,BOX_NAME, VALUE, PROM_EFFDATE, PROM_CLOSEDATE
FROM tab
UNION
SELECT Box_ID,BOX_NAME, NULL, NULL, NULL
FROM tab
WHERE PROM_CLOSEDATE IS NOT NULL
order by 2
但我希望结果更准确。当我输入JE2(第二次)Occurance的值和生效日期(不给CLOSE_DATE)时,那时我得到以下输出。
Box_ID BOX_NAME VALUE PROM_EFFDATE PROM_CLOSEDATE
11 JE 1 115 2/27/2014
11 JE 2 80 2/27/2014 3/6/2014
11 JE 2 90 4/6/2014
11 JE 2
11 JE 4 60 2/17/2014
11 JE 3
但实际上,当BOX_NAME(此处为JE2)记录没有Closedate时,我不需要具有NULL值的记录,NULL生效日期,NULL关闭。 我只需要有closeate的记录是非NULL的情况。即使它有价值,生效日期和没有关闭的记录,也不应该出现空记录。 这是我的要求。请帮我解答。
答案 0 :(得分:2)
最简单的方法是使用union all
WITH tab(Box_ID,BOX_NAME, VALUE, PROM_EFFDATE, PROM_CLOSEDATE) AS (
SELECT 11,'JE 1',115,'2/27/2014', NULL FROM dual UNION ALL
SELECT 11,'JE 2', 80,'2/27/2014','3/6/2014' FROM dual UNION ALL
SELECT 11,'JE 2', 90,'2/28/2014','3/7/2014' FROM dual UNION ALL
SELECT 11,'JE 4', 60,'2/17/2014', NULL FROM dual UNION ALL
SELECT 11,'JE 3', NULL, NULL, NULL FROM dual)
----------
--End of data preparation
----------
SELECT Box_ID,BOX_NAME, VALUE, PROM_EFFDATE, PROM_CLOSEDATE
FROM tab
UNION
SELECT Box_ID,BOX_NAME, NULL, NULL, NULL
FROM tab
WHERE PROM_CLOSEDATE IS NOT NULL
order by 2
输出:
| BOX_ID | BOX_NAME | VALUE | PROM_EFFDATE | PROM_CLOSEDATE |
|--------|----------|--------|--------------|----------------|
| 11 | JE 1 | 115 | 2/27/2014 | (null) |
| 11 | JE 2 | 80 | 2/27/2014 | 3/6/2014 |
| 11 | JE 2 | (null) | (null) | (null) |
| 11 | JE 3 | (null) | (null) | (null) |
| 11 | JE 4 | 60 | 2/17/2014 | (null) |
答案 1 :(得分:1)
SELECT Box_ID,BOX_NAME, VALUE, PROM_EFFDATE, PROM_CLOSEDATE
FROM tab
UNION
SELECT Box_ID,BOX_NAME, NULL, NULL, NULL
FROM tab
WHERE (PROM_CLOSEDATE IS NOT NULL
AND PROM_EFFDATE IS NOT NULL) AND
(PROM_CLOSEDATE IS NULL
AND PROM_EFFDATE IS NOT NULL)
order by 2
此代码可以使用