sql 根据一个字段的值判断显示其他字段的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 根据一个字段的值判断显示其他字段的值相关的知识,希望对你有一定的参考价值。
比如一个多选试题的表字段题目、选项A、选项B、选项C、选项D、正确答案对应字段名如下:
topic A B C D ans
测试题目 选项1 选项2 选项3 选项4 A、C
怎样根据ans正确答案字段里的值判断显示出字段A、B、C、D中的内容
比如ans中的值为A、C,则显示出选项1和选项3
请问SQL语句怎么写?多谢
sql server数据库
case when charindex(a,ans) >0 then a
ELSE '' END as a,
case
when charindex(b,ans) >0 then b
ELSE '' END as b,
case
when charindex(c,ans) >0 then c
ELSE '' END as c,
case
when charindex(d,ans) >0 then d
ELSE '' END as d,
ans
from baby
你这个设计的不太好,应该用两个表,一个表只存有几个选项,另一个表存答案 参考技术B
使用分隔字符串:
create function f_splitstrX(@SourceSql varchar(8000),@StrSeprate varchar(100))
returns @temp table(F1 varchar(100))
as
begin
declare @ch as varchar(100)
set @SourceSql=@SourceSql+@StrSeprate
while(@SourceSql<>'')
begin
set @ch=left(@SourceSql,charindex(@StrSeprate,@SourceSql,1)-1)
insert @temp values(@ch)
set @SourceSql=stuff(@SourceSql,1,charindex(@StrSeprate,@SourceSql,1),'')
end
return
end
--使用时
declare @ans varchar(200)
select @ans=ans from 表 where 题目ID=5
declare @columns varchar(1000)
set @columns =''
select @columns=@columns+','+F1 from dbo.f_splitstrX('、',@ans)
set @columns=stuff(@columns,1,1,'')
exec ('select ' +@
+ ' from 表 where 题目ID=5') 参考技术C 什么数据库?下次提问一定要写清楚是什么环境哦,万一别人费了半天劲结果还是数据库不一样多不好
根据其他表单控件更新 Angular Reactive Form 禁用字段的值
【中文标题】根据其他表单控件更新 Angular Reactive Form 禁用字段的值【英文标题】:Update Value of Angular Reactive Form disabled field based on other Form Controls 【发布时间】:2018-08-03 19:30:16 【问题描述】:我在 Angular 中使用反应式表单,并且有一个禁用的表单控件,该控件是根据其他字段/表单控件的值计算的。当它的依赖字段的值发生变化时,如何更新该禁用字段的值。计算正在运行,但我需要它来订阅其他字段的更改。我创建 FormGroup 的函数如下所示:
createBasket(basket: any)
return new FormGroup(
length: new FormControl(basket.length),
width: new FormControl(basket.width),
height: new FormControl(basket.height),
crossSectArea: new FormControl(value: basket.length * basket.width * basket.height, disabled: true, Validators.required)
);
不确定这是否会改变解决方案,但我也在使用 FormArray 来创建表单组实例的数组。
【问题讨论】:
【参考方案1】:FormControl API
公开了一个valueChanges
observable,您可以订阅它,然后使用setValue
方法在订阅块中强制设置另一个表单控件的值:
ngOnInit()
this.basketForm = createBasket(basket);
const length = this.basketForm.get('length');
const width = this.basketForm.get('width');
length.valueChanges.subscribe(val =>
width.setValue(val * 2);
);
工作示例:https://stackblitz.com/edit/interdependent-form-controls。
【讨论】:
感谢 vincecampanale 的详细回答。我在其他地方使用自定义验证器,我只是觉得必须有一个更简单的解决方案来解决我的问题,因为我不需要验证任何字段,我只需要在其他字段更改时更新字段的值(计算)。 我第一次完全看错了你的问题,我的错!更新了我的答案,因此它实际上回答了您的问题。 哈哈,不用担心,谢谢!我唯一的问题是如何在 FormArray 中实现它? 很高兴为您提供帮助,我不确定如何根据您提供的代码回答您的问题。如果要在数组中设置控件的值,可以使用FormArray
上的setControl
。如果要设置数组的值,可以使用上面显示的setValue
方法。如果您在问题中显示的组是数组的成员,您可以遍历该数组并使用我提到的方法。这取决于您的代码和您要执行的操作,但valueChanges
和setValue
的通用组合无论如何都可以解决问题。
这里是FormArray
API 文档的链接:angular.io/api/forms/FormArray。这些信息有帮助吗?以上是关于sql 根据一个字段的值判断显示其他字段的值的主要内容,如果未能解决你的问题,请参考以下文章