如果列A为null,则使用SQL,然后使用列B的值计算列C.

时间:2012-04-17 19:16:51

标签: sql ms-access

使用具有以下设计的MS Access数据库:

Tables
Equipment, Employees, CreditCard

Fields
Equipment: ID, PrimaryEmployee, SecondaryEmployee
Employees: ID, CreditCard
CreditCard: ID, Number, Pin

因此,一件设备可以分配两名不同的员工。每个员工都可以分配一个CreditCard,或者根本不分配。

根据设备的ID:

  • 如果设备设置了SecondaryEmployeeID,那么 相应的Employee设置了一个CreditCard,然后返回值 那个CreditCard。
  • 否则如果设备设置了PrimaryEmployeeID,那么 相应的Employee设置了一个CreditCard,然后返回值 那个CreditCard。

我还必须在同一个查询中从Employees表中提取员工的姓名,因此,之前我使用的是LEFT JOIN,这似乎使我无法按照我的知识这样做。

EDITED

我当前的查询尝试:

SELECT
    Equipment.ID,
    Equipment.PrimaryEmployee,
    Equipment.SecondaryEmployee,
    Employees.CreditCard,
    CreditCard.Pin
FROM
    (Equipment
        LEFT JOIN Employees ON Equipment.PrimaryEmployee = Employees.ID
    )
LEFT JOIN CreditCard ON Employees.CreditCard = CreditCard.ID
WHERE (((Equipment.EquipmentType)=1))

我从查询中删除了一些不相关的字段,希望提高可读性,并简化我遇到麻烦的区域。

目前正在产生如下结果:

ID    PrimaryEmployee    SecondaryEmployee    CreditCard    Pin
--------------------------------------------------------------------
1     John Doe           Jack Smith           1234567890    1234
2     Bubba Smith        Ryan Howard          2345678901    2345

问题是它只匹配PrimaryEmployee。我需要它首先检查SecondaryEmployee,如果没有匹配或信用卡设置,那么匹配PrimaryEmployee。如果两者都不匹配,则返回Null或' - '。

如果仍需要其他信息,请与我们联系。

2 个答案:

答案 0 :(得分:1)

在不破坏SQL的情况下,最简单的方法是创建第二个查询,使用第一个查询的结果,然后在第一个结果IS NULL.

的Employee列中输入

一旦你得到了两个查询,那么你只需要编写第三个查询,将两个查询的结果连接到一个输出中。

答案 1 :(得分:0)

LEFT JOIN Employees ON ISNULL(Equipment.SecondaryEmployee, Equipment.PrimaryEmployee) = Employees.ID

这应该有效,但检查性能。左连接将为没有雇员的人提取空值。