我有下表
ID Emp_Name Type
1 JDoe Except
1 JDoe NTF
1 JDoe JD
1 JDoe NULL
2 Kevin NTF
2 Kevin FTP
3 Rob NTF
我正在尝试创建一个附加列,该列为所有类型为“ Except”的emp行分配一个值“ 1”
下面是我的预期输出,
ID Emp_Name Type Calc
1 JDoe Except 1
1 JDoe NTF 1
1 JDoe JD 1
1 JDoe NULL 1
2 Kevin NTF 0
2 Kevin FTP 0
3 Rob NTF 0
我正在寻找使用Apply运算符完成此操作的想法(我尝试使用子查询进行少数查询,但效果不佳,因此我正在寻找其他方法)。
答案 0 :(得分:1)
尝试使用CASE,请参见下面的示例。
Select id, emp_name, type,
case
when type = 'Except' then 1
else 0
end as calc
from
table
答案 1 :(得分:1)
您可以尝试以下方式-使用窗口功能
select *,
count(case when types='Except' then 1 end) over(partition by emp_name order by id) as calc
from tablename
输出:
id emp_name types calc
1 JDoe Except 1
1 JDoe NTF 1
1 JDoe JD 1
1 JDoe 1
2 Kevin NTF 0
2 Kevin FTP 0
3 Rob NTF 0
答案 2 :(得分:0)
首先,您必须添加一列
ALTER TABLE #Temp //YourTableName
ADD Calc INT NOT NULL DEFAULT (0)
然后使用更新查询。...
UPDATE #Temp
SET Calc = 1
WHERE ID IN
(
SELECT ID FROM #Temp WHERE [TYPE]='Except'
)
答案 3 :(得分:0)
使用窗口功能。因为您只需要0
或1
,所以我建议max()
:
select t.*,
max(case when type = 'Except' then 1 else 0 end) over (partition by type) as calc
from t;
如果calc
实际上是表中的一列,并且您想填充它,请使用update
:
with toupdate as (
select t.*,
max(case when type = 'Except' then 1 else 0 end) over (partition by type) as new_calc
from t
)
update toupdate
set calc = new_calc;