在使用'情况运行查询时遇到问题。所以我想创建一个变量来保存查询结果的值' select'到其他表。像下面的例子。请帮助我得到我想要的结果。谢谢。
SELECT
a.field1, a.field2,
a.field3 =
CASE
WHEN a.field1 = 'alfa'
THEN
WHEN
-- I want to declare variable to check get value from another table with query select and condition 'WHERE' with variable declare
var varTest = (SELECT TOP 1 b.field1 FROM Table2 as b WHERE b.field2=a.field2) Then
if varTest = 'actif' then
SELECT (c.field4 * C.field5) as hasil FROM Table2 as c WHERE c.field1=varTest)
ELSE
a.field3
END
FROM
Table1 a(NOLOCK)
WHERE
a.field1 = 'alfa'
这是样本数据:
field1 | field2 | field3 | > Table1
alfa idAlfa 0
beta idBeta 0
carlie idCarlie 0
field1 | field2 | field4 | field5 | > Table2
actif idAlfa 80 5
pasif idBeta 50 5
other idCarlie 10 5
结果:
field1 | field2 | field3
alfa idAlfa 400
beta idBeta 250
carlie idCarlie 50
答案 0 :(得分:0)
您不需要任何类型的变量来完成此任务。
一个简单的JOIN
和CASE
将获得活动(actif)记录,计算您的field4 * field5
结果(hasil)或使用0表示所有被动(pasif)或其他记录,如此:
SELECT
a.field1,
a.field2,
CASE b.field1 -- check id...
WHEN 'actif'
THEN b.field4 * b.field5 -- if 'actif' record, calculate result
ELSE
a.field3 -- not the 'actif' record, use default value
END AS hasil
FROM Table1 AS a -- join the two tables by id name
LEFT JOIN Table2 AS b
ON a.field2 = b.field2;
如果您正在使用SQL Server 2012,则可以使用CASE
压缩此IIF
语句:
SELECT
a.field1,
a.field2,
IIF(b.field1 = 'actif', b.field3 * b.field4, a.field3) AS hasil
FROM Table1 AS a
LEFT JOIN Table2 AS b
ON a.field2 = b.field2;
使用这些查询中的示例数据的结果是:
field1 | field2 | hasil
alfa idAlfa 400
beta idBeta 0
charlie idCharlie 0
为了将来参考,您在示例SQL中显示的IF
语法无效。这用于影响SQL执行方式的流控制语句;通常在存储过程中看到。 IF
无法在表达式中使用。相反,请使用CASE
或IIF
语句。
答案 1 :(得分:0)
在我看来,这就是你的意图。很难完全确定。这也可能不是最有效的查询,因为避免case
表达式中的子查询通常是一个好主意。
a.field3 =
CASE WHEN a.field1 = 'alfa' THEN
CASE WHEN (
SELECT TOP 1 b.field1 FROM Table2 as b
WHERE b.field2 = a.field
) = 'actif'
THEN (
SELECT c.field4 * C.field5 as hasil FROM Table2 as c
WHERE c.field1 = 'actif'
)
ELSE a.field3
END
ELSE null
END