我一直在尝试在SQL中显示特定类型的结果,但却无法做到。我想这是可能的,但无法弄清楚如何。 我已经阅读了这篇文章show only those columns which have data value,但无法解决我的问题。 我有4个表:sparametros(保存参数代码和描述),sparametrosnumericos(保存数字参数值及其代码),sparametrostexto(保存文本参数及其值),sparametrosmemo(保存备忘录类型参数) 所有这些都可以通过它们的参数代码连接起来,但是,参数代码在某种意义上是唯一的,例如,给定一个代码,比方说1210,让我们假设它是一个文本类型参数,那么该代码不存在于数字也不是备忘录参数。但是它存在于一般的sparametros表中。换句话说,sparametros包含所有参数,其他表表示该主集的子集。 我尝试过使用左连接,但无法获得结果。
这是我到目前为止所做的:
SELECT P.SPar00Id, P.SPar00Descripcion,
IF NOT ISNULL(N.SPar00NumValor) THEN
N.SPar00NumValor
ELSEIF NOT ISNULL(T.SPar00TextoValor) THEN
T.SPar00TextoValor
ELSE
M.SPar00MemoValor
FROM sparametros p
LEFT JOIN sparametrosnumericos N ON N.SPar00NumId = P.SPar00Id
LEFT JOIN sparametrostexto T ON T.SPar00TextoId = P.SPar00Id
LEFT JOIN sparametrosmemo M ON M.SPar00MemoId = P.SPar00Id
WHERE P.SIns00Id = 1 AND
N.SIns00Id = 1 AND
T.SIns00Id = 1 AND
M.SIns00Id = 1;
我现在正在使用MySQL(使用Navicat客户端),但也需要能够在SQL Server中获得相同的结果。
执行此请求时我得到的响应是: “[Err] 1064 - 您的SQL语法出错;请查看与您的MySQL服务器版本对应的手册,以便在'NOT ISNULL(N.SPar00NumValor)附近使用正确的语法”
答案 0 :(得分:1)
试试这个:
SELECT P.SPar00Id, P.SPar00Descripcion,
(CASE WHEN N.SPar00NumValor IS NOT NULL THEN N.SPar00NumValor
WHEN T.SPar00TextoValor IS NOT NULL THEN T.SPar00TextoValor
ELSE M.SPar00MemoValor
END) colName
FROM sparametros p
LEFT JOIN sparametrosnumericos N ON N.SPar00NumId = P.SPar00Id
LEFT JOIN sparametrostexto T ON T.SPar00TextoId = P.SPar00Id
LEFT JOIN sparametrosmemo M ON M.SPar00MemoId = P.SPar00Id
WHERE P.SIns00Id = 1 AND N.SIns00Id = 1 AND T.SIns00Id = 1 AND M.SIns00Id = 1;