【发布时间】:2018-08-23 10:53:04
【问题描述】:
我有一个查询,我使用 case when to KNOWN_AS 列说明当它的 null 时然后“null”否则“not null”以 known_as2 结尾。现在在 where 子句中,我想引入仅包含 'Not null' 的行。
SELECT i.individual_ref, 0, 'KNOWNAS', i.FORENAMES, i.KNOWN_AS,
case when KNOWN_AS is null then 'Null' else ' Not null' end as known_as
FROM TestDatabase.dbo.INDIVIDUAL I
JOIN TestDatabase.dbo.MEMBER M ON M.INDIVIDUAL_REF=I.INDIVIDUAL_REF
WHERE m.member_status IN(33,1316)
AND i.KNOWN_AS IS null or i.KNOWN_AS=''
and m.MEMBER_STATUS in (33,1316)
and LEN(i.FORENAMES) > '1' and i.FORENAMES !=''
AND i.FORENAMES IS NOT NULL
我需要帮助的原因是:-
我有一个包含 Forename、surname 和 known_as 字段的表。 我想获取 known_as 字段为空白/空且名字不为空或空白且名字长度为 >1 的成员。我怎样才能实现它。成员状态来自另一个表调用成员,我希望成员处于活动和待处理状态,因此我说 WHERE m.member_status IN (33,1316)。请有任何解决方案。
我终于用
解决了 SELECT i.individual_ref,0,'KNOWNAS',
case when KNOWN_AS is null then 'Null' else ' Not null' end as knownas2
FROM TestDatabase.dbo.INDIVIDUAL I
JOIN TestDatabase.dbo.MEMBER M ON M.INDIVIDUAL_REF=I.INDIVIDUAL_REF
WHERE m.member_status IN(33,1316)
and len(i.forenames)>2 and
(IsNull(i.forenames, '') <> '') and (i.known_as is null or i.known_as='')
我不得不取 len(i.forenames, '')>2 而不是 1,因为有些成员的名字也被错误地更新为 Mr.
【问题讨论】:
-
你有什么问题?
-
我认为他想要的是他在案件中所做的 known_as,而不是原始字段
-
派生表才是解决办法!
-
Logical processing order of the SELECT statement: "...这个顺序决定了在一个步骤中定义的对象何时可用于后续步骤中的子句.... 4. WHERE ... 8. SELECT"。不幸的是,SQL 的定义者犯了一个巨大的错误,让您以与逻辑处理顺序不同的顺序编写子句。修复它为时已晚:-(
-
@GordonLinoff 我需要帮助的原因是:- 我有一个包含 Forename、surname 和 known_as 字段的表。我想获取 known_as 字段为空白/空且名字不为空或空白且名字长度为 >1 的成员。我怎样才能实现它。成员状态来自另一个表调用成员,我希望成员处于活动和待处理状态,因此我说 WHERE m.member_status IN (33,1316)。请提供任何解决方案。
标签: sql sql-server tsql