注意:老实说,不知道如何标题。 :/
使用以下SQL查询,我得到以下结果。
select distinct P.ID
,P.LASTNAME
,P.FIRSTNAME
,T.FLAG
,CASE WHEN T.FLAG = 'T' THEN T.NAME ELSE NULL END AS NAME
,CASE WHEN T.FLAG = 'T' THEN R.T_NUMBER ELSE NULL END AS T_NUMBER
,CASE WHEN T.FLAG = 'T' THEN T.E_NUMBER ELSE NULL END AS E_NUMBER
,CASE WHEN T.FLAG = 'T' THEN R.S_NUMBER ELSE NULL END AS S_NUMBER
from P
left outer join R on R.P_ID = P.ID
left outer join T on T.ID = R.T_ID
ID LASTNAME FIRSTNAME FLAG NAME T_NUMBER E_NUMBER S_NUMBER
11 ME LOU F NULL NULL NULL NULL
11 ME LOU T NAME1 11 123 11115
11 ME LOU T NAME2 22 456 22225
11 ME LOU T NAME3 33 789 33335
11 ME LOU T NAME4 44 012 44445
12 DON JOE NULL NULL NULL NULL NULL
13 SAM CAR NULL NULL NULL NULL NULL
我对查询进行了哪些更改,以便在结果集中不返回第一行,因为其他ID 11行包含数据,同时仍返回最后两行,因为ID没有其他行12和13?
给定一个ID,如果存在一个具有相同ID的行,其中包含非空NAME,T_NUMBER,E_NUMBER,S_NUMBER数据,那么我也不希望所有这些列中包含null的行。 下面是我想要的输出。
ID LASTNAME FIRSTNAME FLAG NAME T_NUMBER E_NUMBER S_NUMBER
11 ME LOU T NAME1 11 123 11115
11 ME LOU T NAME2 22 456 22225
11 ME LOU T NAME3 33 789 33335
11 ME LOU T NAME4 44 012 44445
12 DON JOE NULL NULL NULL NULL NULL
13 SAM CAR NULL NULL NULL NULL NULL
我使用distinct
,group by
,union
进行了测试/测试但没有成功。
我不希望ME LOU
的第一行的原因是因为我知道存在包含更多数据的记录,我可以从这些记录中获取该人的姓名。
我想要最后两行的原因是因为我仍然想要那个人记录,以便我知道它们存在。
答案 0 :(得分:0)
如果我理解正确,您希望过滤掉{1}行,而不是1行。如果是这样的话:
'F'
答案 1 :(得分:0)
根据您的真实查询的复杂程度,您也可以在两个UNION
语句中执行此操作,但不包括您不想要的条件:
select distinct P.ID
,P.LASTNAME
,P.FIRSTNAME
,T.FLAG
,T.NAME AS NAME
,R.T_NUMBER AS T_NUMBER
,T.E_NUMBER AS E_NUMBER
,R.S_NUMBER AS S_NUMBER
from P
inner join R on R.P_ID = P.ID
inner join T on T.ID = R.T_ID
where
T.FLAG = 'T' -- excludes T.FLAG = 'F'
UNION ALL
select P.ID
,P.LASTNAME
,P.FIRSTNAME
,NULL
,NULL
,NULL
,NULL
,NULL
from P
left outer join R on P.ID = R.P_ID
where
R.T_ID is null -- excludes T.FLAG is not null