我有以下查询;SQL根据条件仅返回特定行
SELECT DISTINCT CASE
WHEN ROLE.OBJECT = A.REFSTR THEN P.REFSTR + '-A'
WHEN ROLE.OBJECT = AG4.REFSTR THEN P.REFSTR + '-AG4'
WHEN ROLE.OBJECT = AG3.REFSTR THEN P.REFSTR + '-AG3'
WHEN ROLE.OBJECT = AG2.REFSTR THEN P.REFSTR + '-AG2'
WHEN ROLE.OBJECT = AG1.REFSTR THEN P.REFSTR + '-AG1'
END AS REFSTR
FROM APPLICATIONGROUP AG1
JOIN APPLICATIONGROUP AG2
ON AG2.BELONGSTO = AG1.REFSTR
JOIN APPLICATIONGROUP AG3
ON AG3.BELONGSTO = AG2.REFSTR
JOIN APPLICATIONGROUP AG4
ON AG4.BELONGSTO = AG3.REFSTR
JOIN RELATIONS R
ON R.TOREF = AG4.REFSTR
AND R.PROPERTY = 'ApplicationGroups'
JOIN APPLICATION A
ON A.REFSTR = R.FROMREF
JOIN ROLE
ON ROLE.OBJECT = A.REFSTR
OR ROLE.OBJECT = AG1.REFSTR
OR ROLE.OBJECT = AG2.REFSTR
OR ROLE.OBJECT = AG3.REFSTR
OR ROLE.OBJECT = AG4.REFSTR
JOIN ROLETYPE RT
ON RT.REFSTR = ROLE.ROLETYPE
AND RT.NAME = 'BC Coordinator'
JOIN PERSON P
ON P.REFSTR = ROLE.RESPONSIBLE
WHERE A.REFSTR = '326-1480-0'
它给我下面的记录返回;
REFSTR
273-1123-0-A
273-18075-0-AG4
273-26853-0-AG3
273-27196-0-AG2
273-3235-0-AG1
我在找的是一种只显示第一条记录的方法,如果它存在的话; 如果选择记录'%A',则只显示'%A',如果没有显示记录'%A',则显示'%AG4'等。
所以需要输出记录,如果找不到表格应用程序,如果找不到,那么ApplicationGroup AG4如果找不到,那么AG3等等。
一个更新,因为也许我在我原来的问题不够清楚。
我有一个应用程序组的等级AG1 =父母,AG2孩子AG1,AG3孩子AG2,AG4孩子AG3。这是由孩子的父母REFSTR = BELONGSTO处理的。
我有一个链接到AG4组的应用程序,在表关系中处理链接。所以application.REFSTR = Relation.FROMREF和AG4.REFSTR = Relation.TOREF。
在这些对象A,AG1,AG2,AG3,AG4中的每一个上,我都可以分配一个责任(BC协调员),这是一个对某人的引用。这在表ROLE中处理,因此OBJECT引用应用程序A或其中一个应用程序组(AG1,AG2,AG3,AG4),然后引用ROLE上的Person.RESPONSIBLE = PERSON.REFSTR。这里的最后一个连接是ROLETYPE.REFSTR = ROLE.ROLETYPE,它将(BC协调员)控制为一个特定的RoleType.责任的分配可以是1-1或1-n在任何级别。
要求如下;
我需要的都开始于应用程序A,如果责任(BC协调员)的分配如果存在的话那就给我谁拥有这1个或多个的所有人员。
如果在应用程序中找不到任何内容,请查看应用程序A分配到的ApplicationGroup AG4。再次是1或很多。
如果在ApplicationGroup AG4上找不到任何内容,请查看其父ApplicationGroup AG3。
如果在ApplicationGroup AG3上找不到任何内容,请查看其父应用程序组AG2。
如果在ApplicationGroup AG2上找不到任何内容,请查看其父应用程序组AG1。
如果仍然没有发现,则没有结果。
我遇到的问题是这个逻辑从一个层次到另一个,因为我之前的评论使用此查询,如果它只是始终得到1周的结果将工作的头等1,但是这可能是很多结果在任何级别。
感谢TOP1得到我,我找然而所有这些类别的结果可能有多个,我需要所有的人,所以如果2个记录来,为要接2,如果没有A和2 AG4然后从AG4的2 – RobertE 2014-11-03 21:35:50
这种矛盾你在你的问题中陈述。似乎你需要提供更多的解释。 – 2014-11-03 22:40:35
嗨,请看我的主要问题,我希望它更清晰。 – RobertE 2014-11-04 07:10:48