sql - 在什么情况下如何使用 IS NOT NULL?
问题描述
我在 SSMS 中有以下 SQL 查询,我想排除NULL
出现在“公司间预算”列中的行。
我试图搜索答案并为 加上一个WHERE
子句'Intercompany Budget' IS NOT NULL
,就像在下面的查询中一样,但NULL
行仍然显示。
有什么建议么?谢谢!
SELECT
ONE.PROJECT_CODE AS 'Charter Number',
TWO.Charter_sales_amount - SUM(ONE.HOME_VALUE) AS 'Gross Margin',
SUM(CASE WHEN (ONE.COSTCENTRE_CODE = 'ACS 50% GM') THEN (ONE.HOME_VALUE) END) AS 'Intercompany Budget',
(TWO.Charter_sales_amount - SUM(ONE.HOME_VALUE)) - SUM(CASE WHEN (ONE.COSTCENTRE_CODE = 'ACS 50% GM') THEN (ONE.HOME_VALUE) ELSE 0 END) AS 'Difference',
((TWO.Charter_sales_amount - SUM(ONE.HOME_VALUE)) - SUM(CASE WHEN (ONE.COSTCENTRE_CODE = 'ACS 50% GM') THEN (ONE.HOME_VALUE) ELSE 0 END)) / 2 AS 'Budget Adjustment Required'
FROM
dbo.AA_CST_CENTRE_TRANSACTION_SIMPLE_VIEW AS ONE
LEFT JOIN
dbo.CFMS_Charters_FlightsAndGrossMargin_IncICFLIGHT AS TWO ON ONE.PROJECT_CODE = TWO.Charter_Number
WHERE
ONE.CT_DEADLINE BETWEEN '2/1/2021' AND '5/15/2021'
AND ONE.CT_TRANTYPE= 'MSC'
AND 'Intercompany Budget' IS NOT NULL
GROUP BY
ONE.PROJECT_CODE, TWO.Charter_sales_amount, TWO.Charter_Gross_Margin
HAVING
SUM(ONE.HOME_VALUE) <> 0
ORDER BY
one.PROJECT_CODE
解决方案
'Intercompany Budget' IS NOT NULL
永远不可能是真的,'Intercompany Budget'
是一个文字字符串,因此没有 value NULL
。这实际上是为什么使用文字字符串作为别名是一个坏习惯的原因之一,因为它会导致这样的误解。'Intercompany Budget'
不引用使用AS 'Intercompany Budget'
;定义的别名的列 它实际上是一个文字字符串。只有在别名中,语法才被(不幸地)接受。
如果必须使用需要定界标识的别名,则使用方言的定界标识符,[]
T-SQL 中的方括号 ( ) 或 ANSI 定界标识符,双引号 ( "
)。但是,理想情况下,根本不要使用需要定界标识的别名/名称。我倾向于使用 PascalCase(如下图所示)。
至于过滤掉行,一种方法是使用 CTE:
WITH CTE AS(
SELECT ONE.PROJECT_CODE AS CharterNumber,
TWO.Charter_sales_amount - SUM(ONE.HOME_VALUE) AS GrossMargin,
SUM(CASE WHEN (ONE.COSTCENTRE_CODE = 'ACS 50% GM') THEN (ONE.HOME_VALUE) END) AS IntercompanyBudget,
(TWO.Charter_sales_amount - SUM(ONE.HOME_VALUE))
- SUM(CASE WHEN (ONE.COSTCENTRE_CODE = 'ACS 50% GM') THEN (ONE.HOME_VALUE)
ELSE 0
END) AS Difference,
((TWO.Charter_sales_amount - SUM(ONE.HOME_VALUE))
- SUM(CASE WHEN (ONE.COSTCENTRE_CODE = 'ACS 50% GM') THEN (ONE.HOME_VALUE)
ELSE 0
END)) / 2 AS BudgetAdjustmentRequired
FROM.dbo.AA_CST_CENTRE_TRANSACTION_SIMPLE_VIEW ONE
LEFT JOIN.dbo.CFMS_Charters_FlightsAndGrossMargin_IncICFLIGHT TWO ON ONE.PROJECT_CODE = TWO.Charter_Number
WHERE ONE.CT_DEADLINE BETWEEN '2/1/2021' AND '5/15/2021'
AND ONE.CT_TRANTYPE = 'MSC'
GROUP BY ONE.PROJECT_CODE,
TWO.Charter_sales_amount,
TWO.Charter_Gross_Margin
HAVING SUM(ONE.HOME_VALUE) <> 0
ORDER BY ONE.PROJECT_CODE)
SELECT CharterNumber,
GrossMargin,
IntercompanyBudget,
Difference,
BudgetAdjustmentRequired
FROM CTE
WHERE IntercompanyBudget IS NOT NULL;
推荐阅读
- airflow - 如何配置 Dags 文件夹才能看到示例 dag?
- excel - 在数字格式中使用带有转义字符的 TEXT() 会导致 #VALUE!尝试计算结果时出错
- visual-studio - 跳转到 VS Code 中的开始标签?
- python - 如何从列表中提取一系列连续的预先指定的单词?
- java - 本机内存分配 (mmap) 未能映射 12288 字节以提交保留内存
- javascript - JS Worker 在继续之前等待消息
- environment-variables - CodeCommit 未将预期的环境变量输出到 CodePipeline 命名空间
- ios - 如何在 NavigationView 上堆叠 ZStack?
- javascript - 如何防止在 webpack 构建期间丢弃未使用的代码?
- android - Android 文本到语音映射到 Google Cloud 文本到语音语音