SQL CASE子查询

时间:2016-04-20 11:24:39

标签: sql

我有两个表,以下查询在最大实例内存不受限制时检索os内存并显示错误消息:

--osmemory                          --instancememory
servername  osmemory                servername  instancename  instancememory
----------  --------                ----------  ------------  --------------
srva        4096                    srva        srva\insta    2048
srvb        6144                    srvb        srvb\instb    2147483647

select i.ServerName
     , i.instancename
     , case i.instance memory LIKE '2147483647' 
         then (select o.osmemory from o.osmemory
               join i.instance on o.servername = i.servername)
...
  

子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

我一直在尝试(我还在尝试)各种剧本,但没有运气。

有人可以帮忙吗? 感谢

2 个答案:

答案 0 :(得分:0)

错误很明显。您在允许一列和最多一行的上下文中使用子查询。这称为“标量子查询”。解决此问题的一种方法是使用聚合函数:

select i.ServerName, i.instancename,
       (case i.instance memory LIKE '2147483647' 
            then (select max(o.osmemory) from o.osmemory join i.instance on o.servername = i.servername)
       . . . 

然而,这可能不是你的意图。

EDTI:

如果我不得不推测,那么你的问题就是子查询中的join。您可能只想要一个相关的子查询。这是猜测,但是:

select i.ServerName, i.instancename,
       (case i.instance memory LIKE '2147483647' 
            then (select o.osmemory from o.osmemory where o.servername = i.servername)
       . . . 

答案 1 :(得分:0)

如果结果始终为1,则使用Max(o.osmemory)或Max(o.osmemory)并不重要。