我已启动数据库并正在运行,并且可以使用SQL Server 2017 Management Studio进行一些基本选择。我现在遇到的问题是有一个表,该表根据一行中的值生成特定的结果。我有以下当前有效的代码。
我在写另一个案例时遇到了尝试引用Master_Status
的问题。
基本上,我需要说一句,如果Master_Status在第一次检查后为null,然后允许它进入第二个条件,依此类推。我需要为它建立大约10个结果。
这可能吗?我应该使用参考表吗?
编辑
以下更好地代表了我的问题:我试图遍历一堆critera,以确定销售的最终状态。促销只能具有唯一状态,这就是为什么我想检查master_status是否为空。
WITH MasterStatus AS
(
SELECT
[Name]
,case WHEN saleDate is not Null then 'outcome1'
else NULL end as 'Master_Status'
,case when SaleSize is not NULL and Master_Status is Null then
'Outcome2'
else NULL end as 'Master_status'
from [AllNames]
)
select
[Name]
from MasterStatus where Master_Status is not null
答案 0 :(得分:1)
根据查询的当前迭代情况,您似乎在CASE
表达式的工作方式上苦苦挣扎。而不是尝试使用多个CASE
表达式将值分配给同一列(这将不起作用),您需要一个具有多个CASE
条件的WHEN
表达式。
WITH MasterStatus AS
(
SELECT
Name
,CASE
WHEN saleDate IS NOT NULL
THEN 'Outcome1'
WHEN SaleSize IS NOT NULL
THEN 'Outcome2'
--...
WHEN ColumnN IS NOT NULL
THEN 'OutcomeN'
ELSE NULL
END AS Master_Status
FROM
AllNames
)
SELECT
Name
FROM
MasterStatus
WHERE
Master_Status IS NOT NULL;
将按顺序评估WHEN
条件,并在第一个WHEN
评估为TRUE
的情况下,将相应的THEN
值分配给列别名, Master_Status
。
答案 1 :(得分:0)
您实际上已经在使用的东西,我相信您的case语句总是正确的(因此Master_Status始终不为null。
参见下文:
declare @allnames as table ([name] int);
insert into @allnames([name])
values (1),(0)
;WITH MasterStatus as (
select
[name]
,case WHEN [name] = 1 then 'outcome1'
else NULL end as 'Master_Status'
from @allnames
)
select
[name]
from MasterStatus where Master_Status is not null