【发布时间】:2016-11-04 21:21:39
【问题描述】:
注意:老实说,不知道如何命名。 :/
使用以下 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 的行包含非 null 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 的第一行的原因是因为我知道存在包含更多数据的记录,并且我可以从这些记录中获取此人的姓名。
我想要最后两行的原因是因为我仍然想要那个人记录,以便我知道他们存在。
【问题讨论】:
标签: sql sql-server