根据条件声明变量
Posted
技术标签:
【中文标题】根据条件声明变量【英文标题】:Declare Variable based on conditions 【发布时间】:2017-05-22 14:22:40 【问题描述】:我想在下面声明一个变量@Grade:
Declare @Grade varchar(max)''
Select @Grade = ...
连接表需要满足以下条件:
如果 table1 subjectid 存在于 tableA id 中,则为每个 studentid 从 tableA 中选择 @Grade
如果 table1 subjectid 存在于 tableB id 中,则为每个 studentid 从 tableB 中选择 @Grade
如果tableC id中存在table1 subjectid,则为每个studentid从tableC中选择@Grade
Sample Table1 - Student
Student ID Subject ID Rating
100 200 A
101 200 B
102 300 A
103 400 B
104
105 300 A
Sample TableA - Chinese
Subject ID Rating Grade
200 A Good
200 B Poor
Sample TableB - English
Subject ID Rating Grade
300 A Good
300 B Poor
Sample TableC - Maths
Subject ID Rating Grade
400 A Good
400 B Poor
Expected output:
Student ID Subject ID @Grade
100 200 Good
101 200 Poor
102 300 Good
103 400 Poor
104
105 300 Good
有人可以帮我解决这个问题吗?
【问题讨论】:
什么 rdbms?table1 id
是什么?
请查看更新后的表格,谢谢
不。不知道您要在这里做什么。我猜这里的表 1、A、B 和 C 是您的样本数据?如果有,对应的预期结果是什么?
基本上,目标是如果主表 1 中的科目 ID 存在于表 A 或 B 或 C 中,则为每个科目的每个学生 ID 从表 A 或 B 或 C 中选择相应的等级.而 Grade 实际上是一个要声明的变量...
【参考方案1】:
这似乎产生了你预期的结果:
declare @Student table (StudentID int not null,SubjectID int null,Rating char(1) null)
insert into @Student(StudentID,SubjectID,Rating) values
(100,200 ,'A'), (101,200 ,'B'), (102,300 ,'A'),
(103,400 ,'B'), (104,null,null), (105,300 ,'A')
declare @Chinese table (SubjectID int not null,Rating char(1) not null,Grade varchar(17) not null)
insert into @Chinese(SubjectID,Rating,Grade) values
(200,'A','Good'), (200,'B','Poor')
declare @English table (SubjectID int not null,Rating char(1) not null,Grade varchar(17) not null)
insert into @English(SubjectID,Rating,Grade) values
(300,'A','Good'), (300,'B','Poor')
declare @Maths table (SubjectID int not null,Rating char(1) not null,Grade varchar(17) not null)
insert into @Maths(SubjectID,Rating,Grade) values
(400,'A','Good'), (400,'B','Poor')
select
s.StudentID,
s.SubjectID,
COALESCE(c.Grade,e.Grade,m.Grade) as Grade
from
@Student s
left join
@Chinese c
on
s.SubjectID = c.SubjectID and s.Rating = c.Rating
left join
@English e
on
s.SubjectID = e.SubjectID and s.Rating = e.Rating
left join
@Maths m
on
s.SubjectID = m.SubjectID and s.Rating = m.Rating
结果:
StudentID SubjectID Grade
----------- ----------- -----------------
100 200 Good
101 200 Poor
102 300 Good
103 400 Poor
104 NULL NULL
105 300 Good
请注意,尽管您当前的表格设计在这里对我们没有帮助 - 我不清楚为什么我们有三个单独的表格用于主题标记方案 - 所有数据看起来都可以出现在一个表格中,这将大大简化上面的查询。
【讨论】:
感谢您的帮助!的确,中文、英文和数学表只是示例表,有助于在这里更容易地表达我的问题,实际情况这些表实际上是三个单独的表来存储信息...... 您好 Damien,我遇到错误:无法绑定多部分标识符“c.Grade,e.Grade,m.Grade”。 SQL如何识别“s.”、“e.”和“米”。作为三个声明的变量表?以上是关于根据条件声明变量的主要内容,如果未能解决你的问题,请参考以下文章