我有一对多的桌子。表ticket
和表solution
。每张票都有几种解决方案。解决方案包含以下列:ticketId
,status
和serviceId
。
因此,每张票可以通过一个或多个服务解决。 Status
可以是:ready to resolve
和done
。只有一项服务可以为票证工作。但也有可用案例,其中所有票证解决方案的状态=已准备好解决。
我希望从所有票证的表对中获取:票证行 - 解决方案行,其中:serviceId = N且票证没有其他状态=已完成的服务。
我试着解决我的问题:
SELECT t.*, s.* FROM Ticket t
JOIN Solution s ON t.id = s.ticketId
WHERE s.serviceId = N
GROUP BY s.ticketId HAVING SUM(CASE WHEN s.serviceId <> N AND s.status = 'done' THEN 1 ELSE 0 END) = 0;
但是这种方法不起作用,因为WHERE s.serviceId = N
只选择一行和ofcouse,sum总是为0.如果我删除WHERE,那么sum start计算正确,但我从表solution
得到总是第一行的票,但我想要服务= N的行。
我该如何解决?
实施例
Ticket T.解决方案:S1(服务= N,状态=准备好),S2(服务= K,状态=准备好) - &gt;得(T,S1)。
Ticket T.解决方案:S1(服务= N,状态=完成),S2(服务= K,状态=准备好) - &gt;得(T,S1)。
Ticket T.解决方案:S1(服务= N,状态=就绪),S2(服务= K,状态=完成) - &gt;空。
Ofcouse,S3,S4可以提供服务Q,W ......但无论如何:零或一个解决方案将有状态=已完成。
答案 0 :(得分:0)
删除Where
子句并尝试此Having
子句
HAVING SUM(CASE WHEN s.serviceId = 'N' AND s.status = 'done' THEN 1 ELSE 0 END) = 0
AND SUM(s.serviceId = 'N') > 0;
考虑N
应为字符串
答案 1 :(得分:0)
首先使用子查询来识别任何服务不是Ticket
的票证。然后将此结果加入Solution
表,再次加入N
,包括检查服务ID为SELECT t.*, s2.*
FROM Ticket t
INNER JOIN
(
SELECT ticketId
FROM Solution
GROUP BY ticketId
HAVING SUM(CASE WHEN s.status = 'done' THEN 1 ELSE 0 END) = 0
) s1
ON t.id = s1.ticketId
INNER JOIN Solution s2
ON s1.ticketId = s2.ticketId AND
s2.serviceId = 'N'
的解决方案的条件。
<section id="app" class="numberpad">
<section id="display" class="semi">
<div class="semi mten">
<span id="numerals"></span>
</div>
</section>
<ul id="keypad" class="semi">
<li id="one" class="key" role="button"><span class="number">1</span></li>
<li id="two" class="key" role="button"><span class="number">2</span></li>
<li id="three" class="key" role="button"><span class="number">3</span></li>
<li id="four" class="key" role="button"><span class="number">4</span></li>
<li id="five" class="key" role="button"><span class="number">5</span></li>
<li id="six" class="key" role="button"><span class="number">6</span></li>
<li id="seven" class="key" role="button"><span class="number">7</span></li>
<li id="eight" class="key" role="button"><span class="number">8</span></li>
<li id="nine" class="key" role="button"><span class="number">9</span></li>
<li id="dot"><span class="number"> </span></li>
<li id="zero" class="key" role="button"><span class="number">0</span></li>
<li id="back" role="button"><span class="number">X</span></li>
</ul>
</section>