假设我有一个包含两列的表:
TABLE A
-------
ProjectID NUMBER
STATUS VARCHAR2(6) // either 'CLOSED' or 'NEW'
ProjectID
最多可以有两个条目,其中两个STATUS
的可能值,并且组合(ProjectID
,STATUS
)是唯一的。
我只需要选择状态为“ NEW”的ProjectID
。另外,如果对于projectID
,有两个状态不同的条目(NEW和CLOSED),我不希望它出现在输出中。
我尝试使用group by,然后将结果集降序排列(以便首先获得项目ID的“ NEW”行),然后进入LINQ中的第一行,类似于:
var query = (from a in context.A.Where(o => o.STATUS == 'NEW')
group a by a.ProjectID into groups
select groups.OrderByDescending(o => o.ProjectID)
.ThenBy(o => o.STATUS)
.FirstOrDefault());
对接会导致查询中出现“ APPLY” clouse,从而导致错误。显然,Oracle 10g不支持它。
感谢您的帮助。
答案 0 :(得分:1)
正确使用having count(distinct STATUS=1)
:
create table tableA( ProjectID int, STATUS varchar2(10) );
insert all
into tableA values(1 ,'NEW')
into tableA values(1 ,'CHANGED')
into tableA values(2 ,'NEW')
into tableA values(3 ,'CHANGED')
select * from dual;
/
select * from
(
select ProjectID, max(STATUS) STATUS
from tableA
group by ProjectID
having count(distinct STATUS)=1
)
where STATUS = 'NEW';
答案 1 :(得分:1)
也许是这样?
General Spinner.top = Picker Toolbar.bottom
答案 2 :(得分:0)
我相信我已经使用LINQ中的子查询完成了您想要的工作。
var query = (from a in context.A
where (from b in context.A
where b.ProjectID == a.ProjectID
select new { a.ProjectID, a.STATUS }).Distinct().Count() == 0
&& a.STATUS == "NEW"
select a.ProjectID).ToList();
本质上,外部查询只是确保每个a
记录都具有NEW
状态,而内部查询则确保没有两个具有给定ProjectID的不同记录,因为如果有,一个是CLOSED
。我避免使用GROUP BY
,因为您说您的数据库不支持LINQ的方式。
我希望我正确理解了您的问题,希望对您有所帮助!