我是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;
我想做的是:
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 |
+-----+-------+
我要执行以下操作:
我想要得到的结果是:
+----+------+-------+
| id | cAvg | Model |
+----+------+-------+
| 1 | .8 | M1 |
| 2 | 5.4 | M2 |
| 3 | 6.0 | M3 |
+----+------+-------+
我很累,按照评论中的建议加入,非常感谢,因为它,我学到了很多东西!!
我的问题是没有要连接的公共列。 另外,我需要将一个表中的列与另一张表中的列进行比较,然后根据比较结果得出结果。
我在堆栈溢出中提到了很多答案,但是所有答案都是在有共同列的前提下进行的。
我尝试了以下操作:
我需要一个方向说明。 谢谢!!
答案 0 :(得分:1)
首先,您从2个表中进行选择,但没有任何链接限制,因此将比较所有行
如果表之间存在匹配键,那么将仅在JOIN语句中使用相关的行对进行比较:
def read_img_and_mat(path):
image_string = tf.read_file(path)
image_decoded = tf.image.decode_jpeg(image_string, channels=3)
label = ... # get label from mat file
return image_decoded, label
第二,为了选择相关的行,您应该确定它们是什么。 您可以在WHERE语句中定义什么是未解决的案件
A e JOIN B t ON e.id = t.id
您可以在WHERE中使用case语句,但是应将结果设为TRUE
WHERE
e.cAvg > 12
编辑
在您进行问题编辑之后,我认为您需要的是带有条件的SELECT e.Id,e.cAvg, t.Model
A e JOIN B t ON e.id = t.id
WHERE
CASE WHEN e.cAvg<=6 THEN t.Model when t.Cr=6 then t.Model
WHEN e.cAvg>6 and e.cAvg<=12 THEN t.Model
WHEN t.Cr='12' then t.Model
WHEN e.cAvg>12 and cg<=24 THEN t.Model
WHEN t.Cr='24' then t.Model
ELSE -1 END ! = -1
基本上,不是使用等号键联接表,而是使用不等号键联接表。
由于您要查找到t之间的cAvg。 Cr行,需要2个JOIN
JOIN
这个想法是,只有在两个条件都满足的情况下,您才能得到e的结果 希望有帮助
答案 1 :(得分:1)
我找到了解决该问题的可能方法。
问题陈述:
比较两个没有公共列的表。
使用CASE中的比较来选择特定的行。
T-SQL不接受CASE中的WHERE子句。
我的解决方法:
表格:
表A:
1,2018-10-17,John
2,2018-10-12,Mary
3,2018-10-19,David
表B
+----+------+
| id | cAvg |
+----+------+
| 1 | .8 |
| 2 | 5.4 |
| 3 | 6.0 |
+----+------+
查询以分配ID:
+-----+-----+-------+
| Bid | Cr | Model |
+-----+-----+-------+
| 1 | 2 | M1 |
| 2 | 5.5 | M2 |
| 3 | 8 | M3 |
+-----+-----+-------+
上述查询的结果将是如下视图:
CREATE VIEW [AssignIDView] AS
SELECT DISTINCT e.id,
e.cAvg,
(CASE
WHEN e.cAvg>=0 and e.cAvg<=2 THEN 1
WHEN e.cAvg>2 and e.cAvg<=5.5 THEN 2
WHEN e.cAvg>3 and e.cAvg<=8 THEN 3
ELSE 'Invalid'
END) As BId
FROM A e, B t;
现在使用出价从表B中选择行,以从表B中分配模型:
查询:
+----+------+-----+
| id | cAvg | Bid |
+----+------+-----+
| 1 | .8 | 1 |
| 2 | 5.4 | 2 |
| 3 | 6.0 | 3 |
+----+------+-----+
查询的结果如下:
CREATE VIEW [ModelAssignView] AS
select e.id,
e.cAvg,
t.Model as [Model]
FROM A e, B t where e.TierID = t.id;
我的问题的目的是做上述事情。 为此,我想在CASE中找到一个等效的WHERE子句。
但是上述方法为我解决了问题。 希望对您有所帮助:)!