我正在试图找到一种方法,只显示基于dpa.value的联系人详细信息,因此可以根据dpa值将联系人排除在输出列表之外,如果dpa值等于5,则不包括联系人。如果dpa值=3或4,则排除电子邮件地址。如果值=2或4,则排除电话
排除联系如果db.organizationpersonnels.employedtodate)为空此代码似乎不工作,任何帮助将不胜感激。
SELECT
DB.OrganisationPersonnel.OrganisationID
, DB.OrganisationPersonnel.PersonnelID AS [if not ProductPAID =5]
, DB.Title.Name
, DB.Person.FirstName
, DB.Person.MiddleName
, DB.Person.LastName
, DB.OrganisationPersonnel.ActualJobTitle
, DB.Phone.Number AS [if ProductPAID <3]
, DB.Email.Email AS [if ProductPAID =2 or 5]
, DB.Person.ProductDPAID
, DB.ProductDPA.Name
FROM
(((DB.OrganisationPersonnel
INNER JOIN
(DB.Person
INNER JOIN
DB.Title
ON
DB.Person.TitleID = DB.Title.ID)
ON
DB.OrganisationPersonnel.PersonnelID = DB.Person.ID)
LEFT JOIN
DB.Phone
ON
DB.OrganisationPersonnel.PhoneID = DB.Phone.ID)
LEFT JOIN
DB.Email
ON
DB.OrganisationPersonnel.EmailID = DB.Email.ID)
INNER JOIN
DB.ProductDPA
ON
DB.Person.ProductDPAID = DB.ProductDPA.ID
WHERE
(((DB.OrganisationPersonnel.EmployedToDate) Is Null))
ORDER BY
DB.OrganisationPersonnel.OrganisationID;
我试图增加额外的地方,但无法解决如何没有错误。任何帮助将不胜感激,因为我是一个新的sql。
4条答案
按热度按时间2ekbmq321#
您可以编写简单的查询,但长度如下
您必须编写join,如示例所示
5jvtdoz22#
请尝试下面的查询。
pwuypxnk3#
您的连接很好(尽管大多数人更喜欢join后跟on的语法变体)。但您应该开始使用别名来简化源代码的编写和读取:
SELECT
op.OrganisationID
, CASE WHEN ProductPAID <> 5 THEN op.PersonnelID END AS PersonnelID
, DB.Title.Name
...
, CASE WHEN ProductPAID <3 THEN p.Number END AS PhoneNumber
, CASE WHEN ProductPAID IN (2, 5) THEN e.Email END AS email
js81xvg64#
首先,你不需要任何括号
FROM
条款。把它们取下来。数据库引擎查询优化器将以最好的顺序为您执行连接。下一步,您的计算机上会出现语法错误
ON
上下文。你应该使用AND
表达式,因为它只是一个布尔表达式。而不是写作一定要写