簡體   English   中英

SQL CASE子查詢

[英]SQL CASE sub-query

我有兩個表,以下查詢可在最大實例內存不受限制時檢索操作系統內存,並顯示錯誤消息:

--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。 當子查詢遵循=,!=,<,<=,>,> =或將子查詢用作表達式時,不允許這樣做。

我一直在嘗試(而且我還在嘗試)各種腳本,但是沒有運氣。

有人可以幫忙嗎? 謝謝

錯誤很明顯。 您在允許一列最多一行的上下文中使用子查詢。 這稱為“標量子查詢”。 解決此問題的一種方法是使用聚合函數:

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)
       . . . 

還是使用Max(o.osmemory)或Max(o.osmemory)不管結果是否始終為1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM