【发布时间】:2016-03-15 20:55:35
【问题描述】:
我有这个问题:
Select b.building_pk, bil.building_fk, bil.BillingAccountStatus_fk, b.ACTL_TNT_CT
From [DB].[Schema].Building b (nolock)
left Join [DB].[Schema].Billing bil (nolock) on bil.building_fk = b.building_pk
join ##GlobalTempTable1 tt (nolock) on tt.Building_fk = b.building_pk
Order by b.building_pk;
它工作正常。但我想在bil.building_fk 和bil.BillingAccountStatus_fk 列的结果集中覆盖NULLs,因为并非Billing tbl 中的所有内容都存在于构建表中。
因此在下面编写了以下查询,但收到此错误消息。
消息 102,级别 15,状态 1,第 7 行 '=' 附近的语法不正确。
请帮忙。
SELECT b.building_pk, bil.building_fk As [BLD Key from Billing], bil.BillingAccountStatus_fk, b.ACTL_TNT_CT As [ActualTenantCount]
FROM [DB].[Schema].Building b (nolock)
join ##GlobalTempTable1 tt (nolock) ON tt.Building_fk = b.building_pk
left Join [DB].[Schema].Billing bil (nolock) ON
CASE
WHEN bil.building_fk IS NOT NULL
THEN bil.building_fk = b.building_pk AND bil.BillingAccountStatus_fk = bil.BillingAccountStatus_fk
WHEN bil.building_fk IS NULL
THEN bil.building_fk = NULL AND bil.BillingAccountStatus_fk = 'Not in Billing'
END
ORDER BY b.building_pk;
【问题讨论】:
-
你的逻辑有多个错误,比如
= NULL。 -
CASE 不是一个语句,它是一个函数/表达式。它应该返回一个值,而不是尝试分配值。
-
你不能使用这样的 case 表达式。你有这么多问题在这里很难解决。全局临时表。由于并发问题,这些都是非常有问题的。你有 NOLOCK 乱扔垃圾。 blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere 您有条件检查列 = NULL 的位置。这不起作用,因为没有任何东西 = NULL。那些需要使用 ISNULL 或 COALESCE,
-
另外,很多人不知道,但布尔/(条件真值)在 SQL 中不是有效的数据类型,不能从表达式/函数返回。
标签: sql sql-server join case