【发布时间】:2019-03-28 21:37:27
【问题描述】:
我是 T-sql 新手。
我正在使用以下查询:
SELECT e.Id,e.cAvg,
CASE
WHEN e.cAvg<=0.8 and cAvg>=0 THEN t.Model when t.Cr='0.8' then t.Model
WHEN e.cAvg>0.8 and cAvg<=5.4 THEN t.Model WHEN t.Cr='5.4' then t.Model
WHEN e.cAvg>5.4 and cg<=8 THEN t.Model WHEN t.Cr='8' then t.Model
ELSE 'No Change Required'
END
from A e, B t;
我想做的是:
- 在表 A 中选择 id 和 cAvg 列。
- 比较表 A 中的 cAvg 和表 B 中的 Cr。
- 使用 CASE 中的比较来选择满足条件的特定行。
- 使用选定的行给出查询结果。
t.Model是表B的一列,我想在case语句中选择选中行的t.Model值。
我觉得方法是在 CASE 的 When 中包含一个相当于 where 子句的子句。
需要指导!!
表架构:
表 A:
+----+------+
| id | cAvg |
+----+------+
| 1 | .8 |
| 2 | 5.4 |
| 3 | 6.0 |
+----+------+
表 B:
+-----+-------+
| Cr | Model |
+-----+-------+
| 2 | M1 |
| 5.5 | M2 |
| 8 | M3 |
+-----+-------+
我想要以下:
- 将 cAvg 的值与条件进行比较 =>(cAvg=5.5 => 选择的模型必须是 M3。)
我想要得到的结果是:
+----+------+-------+
| id | cAvg | Model |
+----+------+-------+
| 1 | .8 | M1 |
| 2 | 5.4 | M2 |
| 3 | 6.0 | M3 |
+----+------+-------+
我厌倦了按照 cmets 的建议加入,非常感谢,因此我学到了很多东西!!。
我的问题是没有可加入的公共列。 我还需要将一个表中的列与另一个表中的列进行比较,然后根据比较给出结果。
我在堆栈溢出中提到了很多答案,但所有答案都是在有一个公共列的前提下。
我尝试了以下方法:
- 内连接
- 案例
我需要一个方向,我需要进入哪个方向。 谢谢!!
【问题讨论】:
-
你需要加入你的表,你通过不发出加入条件得到一个笛卡尔积。切换到显式
JOIN..ON语法(只要我记得,它就是标准) -
查看docs.microsoft.com/en-us/sql/relational-databases/performance/…了解如何使用
FROM A JOIN B ON ... -
还显示一些示例数据(足以满足您的所有条件)和期望的结果。单词问题和不符合您要求的查询不足以编写符合要求的查询。
-
@HoneyBadger 嗨,感谢您对加入的指导,我试过了,但我的问题是表之间没有公共列。我意识到描述含糊不清,因此我更新了问题。谢谢你的帮助!!
标签: sql-server tsql sql-server-2008 case ssms