SQL Server 2008R2加入一对多

时间:2014-03-10 22:11:46

标签: sql function join sql-server-2008-r2 aggregate

我有2个表,表名是caseparty。两个表都有case_id。他们有1对多的关系(1个案件有几个党派)。对于每种情况,必须至少将一方标记为主要方(方表中的是/否字段)。我需要找到案件中没有派对的情况。

到目前为止,我有这个查询,但它只会拉动每个案件中不是主要派对的各方 - 但我需要它才能找到没有指定主要派对的案件。 (我对案件类型也有约束)。我正在使用SQL Server 2008R2。在此先感谢您的帮助!

select 
    [case].case_id, [case].case_number, count(party.case_id)as party_count
from 
    party
join 
    [case] on [case].case_id = party.case_id
where 
    [case].case_type_id IN(12,13,15) 
    and party.primary_party = ''
group by 
    [case].case_id, [case].case_number

2 个答案:

答案 0 :(得分:0)

试试这个:

select *
from case C
left join P on P.case_id = C.case_id and P.primary_party != ''
where P.case_id is null

这将选择所有没有关联的非空主要聚会的案例。

作为旁注,我建议使用null来表示“没有主要派对”而不是空字符串。

答案 1 :(得分:0)

虽然您的代码有点混乱,但必须说(使用SQL保留字作为表或字段名称,或者我必须说的任何其他对象,即使您将它们放在括号上也不是一个好主意)

但是你需要一个正确的外部联接。

它应该是这样的:

SELECT
  C.case_id, 
  C.case_number, 
  COUNT(P.case_id) AS party_count
FROM
  party P
  RIGHT OUTER JOIN [case] C ON 
    C.case_id = p.case_id AND
    C.case_type_id IN (12, 13, 15) 
WHERE 
  P.primary_party = '' AND
  P.case_id IS NULL
GROUP BY
  C.case_id, 
  C.case_number