背景:
我写的大多数脚本搜索缺少数据的记录。我使用XXXX_APPL_NO(WHERE XXXX_APPL_NO = YYYY_APPL_NO
)中的常用值来确保我选择的数据来自正确的行。
如果人员有多个应用程序,APPL_NO将有多行记录。
如果XXXX_APPL_NO不等于YYYY_APPL_NO(因为数据丢失),该脚本将忽略该行。所以我不能使用WHERE XXXX_APPL_NO = YYYY_APPL_NO
我必须把戏它把我想要的数据给我。我相信我已经想出了检索它的过程,但我不知道如何编写它!Oracle SQL - 比较列 - 对于不匹配的值的SELECT记录
这里是实际数据。注:我不知道什么是在空白的领域。约束是“NOT NULL”,所以我相信那里有东西,我只是不知道它是什么!
这里是我当前的代码:
Select distinct
sp.spriden_id as "ID",
SP.SPRIDEN_LAST_NAME as "Last",
SP.SPRIDEN_FIRST_NAME as "First",
SA.SARADAP_TERM_CODE_ENTRY as "App Term",
SA.SARADAP_ADMT_CODE as "Adm Type",
st.SARAATT_TERM_CODE,
st.SARAATT_APPL_NO,
sa.SARADAP_APPL_NO
/* I want to make a column in my report ONLY - NOT IN THE DATABASE -
to print out "No WSP" if there is no corresponding SARAATT_APPL_NO
for the SARADAP_APPL_NO */
FROM
SPRIDEN SP
JOIN SARADAP SA
on sp.spriden_pidm = sa.saradap_PIDM
JOIN SORLCUR SR
on sp.spriden_pidm = SR.SORLCUR_PIDM
full outer JOIN SARAATT ST
on sp.spriden_pidm = ST.SARAATT_PIDM
Where
Sp.spriden_change_ind is null
AND
SA.SARADAP_ADMT_CODE in ('SP', 'XT')
这是我当前的代码返回的数据。请注意,Term_Codes和Appl_Nos不匹配:
请注意:如果我添加st.SARAATT_APPL_NO = sa.SARADAP_APPL_NO
WHERE子句,它会跳过所有行与丢失的数据! (我需要所有的的数据,所以我可以除掉我不需要的)
这是返回的数据,如果我加st.SARAATT_APPL_NO = sa.SARADAP_APPL_NO
。
为了找回我需要的数据,我想要做这样的事情:
从目前的SELECT语句选择所有的数据。
然后,对于每个SARADAP_APPL_NO,在SARAATT_APPL_NO中找到它的匹配项。
SELECT
那些没有匹配的行,并在我为报表创建JUST(不在数据库中)的列中打印“No WSP”。
这是我的意思是什么“它有一个匹配?”:
或者我可以做某种
SARADAP_APPL_NO not in (SARAATT_APPL_NO)
一定spriden_id?
即3 4 not in (2 3 4 5)
如果任何SARAATT_AAPL_NO值(2 3 4 5)的未在SARADAP_APPL_NO值(3 4)包括,将选择的行2 5 SARAATT_APPL_NO的和在一列中我使打印出“否WSP”为报告。
我是否匹配?比较?搜索?
这些是我想要的结果:
我可以做这样的事情和地方在代码中添加呢?我想先选择数据然后通过我选择的循环。
DECLARE
SARADAP_Count number() = 0;
SARAATT_Count number() = 0;
/* to keep going through the SARAATT_APPL_NO column until the end */
WHILE SA.SARADAP_APPL_NO not null
LOOP
/* If value being looked at in SARADAP = the value being looked at in SARAATT */
IF SARADAP_APPL_NO = st.SARAATT_APPL_NO
/* Then add 1 to the count so we can compare the next value in SARADAP with the values in SARAATT*/
THEN SARADAP_Count = SARADAP_Count + 1
/* Otherwise add 1 to the count to look at the next SARAATT value*/
ELSE SARAATT_Count = SARAATT_Count + 1;
/* when we have compared all the values in SARAATT for one SARADAP value, and no values matched, then print 'No WSP' in the "My Report Column" */
WHEN SARADAP_APPL_NO <> st.SARAATT_APPL_NO THEN return 'NO WSP' in "MY REPORT COLUMN"
/* Now go to the next SARADAP row to compare that value with the values in SARAATT */
LOOP
SARADAP_Count = SARADAP_Count +1 /* */
END LOOP
END LOOP
____________________________________________________________________________________
- 有我与工作两个主表:SARADAP和SARAATT。 SARADAP是实际的入场申请。 SARAATT包含属性并与应用程序具有共同的字段(SARAATT/SARADAP _PIDM,SARAATT/SARADAP _TERM_CODE和SARAATT/SARADAP _APPL_NO)
- 第三张表是SPRIDEN,包含该人员的个人信息。我只需要该表中的ID。
- 我的SELECT语句包括两个主表的TERM_CODE和APPL_NO列,但WHERE子句不包含任何使两个表中的TERM_CODE或APPL_NO匹配的条件。这意味着查询只是收集信息并将其放入打印输出中,而不是一致的(如下图所示)。
- 问题:如果我添加一个条件(
SARADAP_APPL_NO = st.SARAATT_APPL_NO
和SARADAP_TERM_CODE = st.SARAATT_TERM_CODE
),则不会选择需要的信息I 。 - 我真正需要的是查询告诉我SARAATT_ATTS_CODE在与APPL_NO或TERM_CODE对应的行中没有任何内容。我无法获取该信息,因为SARAATT_ATTS_CODE对于该行没有任何内容,因此被查询忽略。它有一个NOT NULL约束,所以我不能简单地搜索NULL值。 (这是我尝试通过执行
LOOP
或其他什么来解决的真正问题) - 由于查询不会返回我需要的结果(显示ATTS_CODE未填充的位置),我的工作轮的想法是查看在两个APPL_NO列中查找不在两个列中的值。那些将有一个没有填充的SARAATT_ATTS_CODE行的人。
这是实际的数据是在数据库中(但我已经添加了我的专栏只是为了显示我想打印
这些是我目前的查询 的结果是什么
toddlermenot,你要的Toddlerminot查询中的结果与条款:
我按SARADAP_APPL_NO排序结果。请注意,红色数据会混淆在一起。这不是真的应该在哪里,200810和201510条款以及相应的应用程序编号(2和5)都不存在。这是当查询只查找该表中存在的任何值(我相信它正在使用下一个可用值)并将其放在该行中时,因为该行中实际上没有任何值 - 或者该查询与APPPL不匹配数字和条款。从Toddlerminot查询
结果作为一个整体 我通过SARADAP_APPL_NO排序的结果。
现在我将尝试以“创建像一个[Toddlerminot]张贴在sqlfiddle说明[我]面对的问题。我将它添加到我的问题的问题。
我做到了,在小提琴的小例子。sqlfiddle.com/#!4/f4d10/2请注意,由于存在非空限制,因此我将空白值填入''中。我认为现在实际上是http://www.sqlfiddle.com/#!4/aa83f/1,因为我再次编辑它。我将数据类型更改为数字(2,0),并输入0而不是“'
这就是表格的样子,这是每张表格中的数据。
您的发布标题;你可以简单地做''select * from your_table where columna not in(select your distinct columnb from your_table)' – Rahul 2014-10-01 22:21:35
@Rahul谢谢你的回复。我不确定你的意思。总共涉及4列。我想比较/匹配/搜索的两列是'st.SARAATT'和'sa.SARADAP'。 – 2014-10-01 22:29:29
@Rahul我添加了'SA.SARADAP_APPL_NO不在(SELECT DISTINCT st.SARAATT_APPL_NO FROM SARAATT ST)',但没有选择行。 – 2014-10-01 22:34:34