我的问题与我的这个旧查询有关。我有一个额外的要求,因此这个问题。
Select same column for different values on a different column
下面是我的表格,我的要求是找到以' J'开头的seq3name。然后还为同一名员工选择相应的SEQ4NAME。
EMP_ID SEQ_NR NAME
874830 3 JOHN
874830 4 NOE
874830 21 MIKE
874830 22 BILL
874830 23 ROBERT
874830 24 STEVE
874830 25 JERRY
SELECT EMP_ID
MAX(CASE WHEN SEQ_NR = 3 THEN NAME END) AS SEQ3NAME
MAX(CASE WHEN SEQ_NR = 4 THEN NAME END) AS SEQ4NAME
FROM AC_XXXXX
WHERE SEQ_NR = '3' AND NAME LIKE '%J';
期望输出
EMP_ID SEQ3NAME SEQ4NAME
874830 JOHN NOE
但是这里的问题我把seq4name称为NULL。你能告诉我们一个解决方案,我们可以得到Seq4name吗?
感谢您的帮助。
答案 0 :(得分:0)
据我了解,您尝试查找name
首字母为'J'的所有行。如果是这样,您需要NAME LIKE 'J%'
而不是相反。
除了使用SEQ_NR = 3
限制行外,这意味着结果集中没有任何行SEQ_NR = 4
。
我认为,你应该使用类似的东西:
SELECT EMP_ID
MAX(CASE WHEN SEQ_NR = 3 THEN NAME END) AS SEQ3NAME
MAX(CASE WHEN SEQ_NR = 4 THEN NAME END) AS SEQ4NAME
FROM AC_XXXXX
WHERE SEQ_NR =ANY(3,4)
AND NAME LIKE 'J%'
GROUP BY EMP_ID;
编辑另一种解决方案
SELECT EMP_ID
MAX(CASE WHEN SEQ_NR = 3 AND NAME LIKE 'J%' THEN NAME END) AS SEQ3NAME
MAX(CASE WHEN SEQ_NR = 4 THEN NAME END) AS SEQ4NAME
FROM AC_XXXXX e
WHERE SEQ_NR =ANY(3,4)
AND EXISTS (select null
from AC_XXXXX se
where e.EMP_ID = se.EMP_ID
AND NAME LIKE 'J%')
GROUP BY EMP_ID;