需要复杂SQL查询的解决方案

时间:2014-02-04 16:59:22

标签: sql sql-server join pivot aggregate-functions

我有两张与我合作的投票系统表。

enter image description here第一个被称为委员会成员

enter image description here第二个被称为委员会批准

委员会批准存储不同用户输入的投票详细信息。下面是它将保留的内容的片段

enter image description here

CommissionApprovalStatusID外键列代表 投票 值。它的表看起来像

enter image description here

委员会成员委员会成员表中的外键列代表给予该委员会用户的标题E.ganitor,主席,成员。

enter image description here

我想根据列出所有用户,他们投票的内容以及谁没有投票的查询>特定许可证申请。例如,对于特定许可证应用程序10342 ,格式将类似于

UserID |角色|状态|他投了什么|

我试过的陈述的例子是

  

SELECT * FROM CommitteeMembers LEFT OUTER JOIN CommitteeApproval ON   CommitteeMembers.UserID = CommissionApproval.UserID   WHERE委员会批准.LicenceApplicationID = 10682

但是这只会从委员会批准表的列中带来空值

我尝试了各种各样的陈述,但到目前为止还没有。任何人都知道实现这一目标的有效解决方案吗?

1 个答案:

答案 0 :(得分:2)

您可以OUTER JOIN并评估是否存在记录...如果记录不存在,则表示该成员未投票。角色和MemberStatus应该是内部连接的,因为它们将始终存在于每个成员中。

SELECT
    committeeMembers.UserID,
    committeeMemberStatus.committeeMemberStatus AS [MemberStatus],
    committeeRoles.CommitteeRoleName AS [Role],

    Case 
        When committeeApproval.CommitteeApprovalStatusID IS NULL Then 'No Vote'
        Else committeeApprovalStatuses.CommitteeApprovalStatusName
    End AS [ApprovalStatus],

FROM CommitteeMembers committeeMembers
    INNER JOIN CommitteeMemberStatus committeeMemberStatus ON committeeMemberStatus.CommitteeMemberStatusID = committeeMembers.CommitteeMemberStatusID
    INNER JOIN CommitteeRoles committeeRoles ON committeeRoles.CommitteeRoleID = committeeMembers.CommitteeRoleID

    LEFT OUTER JOIN CommitteeApproval committeeApproval ON committeeApproval.UserID = committeeMembers.UserID