簡體   English   中英

SQL查詢返回多行

[英]SQL query returns multiple rows

如果一個合約的產品類型大於1,我編寫了一個SQL查詢以從列返回值。

當我將此查詢用於主查詢時,出現以下錯誤:

單行子查詢返回多個行

當我使用rownum = 1 ,則不返回任何行。

我需要退還合同的類型

(SELECT
     MAX(TYPE) AS TYPE,
     CONT_NO
 FROM 
     (SELECT    
          MO.CONT_NO, 
          MO.TYPE, 
          COUNT (*) C1
      FROM 
          TABLE1.MORG MO 
      GROUP BY    
          MO.CONT_NO, MO.TYPE) DRT1  
 WHERE  
     DRT1.CONT_NO = CONT_NO 
 GROUP BY 
     CONT_NO
 HAVING 
     COUNT (*) = 1 AND SUM (C1) > 1
) 

可能有幾種方法可以解決您的問題,但是您不會透露太多細節。

如果要在select clause包含該子查詢,則很可能需要將其與當前結果集的某些值“關聯”。 例如

SELECT 
...

      (SELECT
            MAX(TYPE) AS type
      FROM (
            SELECT
                  mo.TYPE
                , COUNT(*) c1
            FROM TABLE1.MORG mo
            WHERE mo.CONT_NO = XYZ.CONT_NO --<<<< a "correlation" to the outer query
            GROUP BY
                  mo.TYPE
            ) drt1
      WHERE drt1.CONT_NO = CONT_NO --<<<< is this a "correlation" to the outer query?
      HAVING SUM(C1) > 1)

FROM XYZ 
....

這是因為您不允許在所選行的“單元格”中返回多個行,因此您需要將結果限制為單值。

在SQL Server中,替代“相關子查詢”的一種非常有用的技術是改為使用OUTER APPLY(或CROSS APPLY),但是看來(可以?)該子查詢可以用作聯接的派生表。

SELECT
       ...
     , x.type
FROM XYZ t
LEFT JOIN (
      SELECT
            MAX(TYPE) AS type
          , CONT_NO
      FROM (
            SELECT
                  mo.CONT_NO
                , mo.TYPE
                , COUNT(*) c1
            FROM TABLE1.MORG mo
            GROUP BY
                  mo.CONT_NO
                , mo.TYPE
      ) drt1
      WHERE drt1.CONT_NO = CONT_NO
      GROUP BY
            CONT_NO
      HAVING COUNT(*) = 1
      AND SUM(C1) > 1
) x ON t.cont_no = x.cont_no

如果這是SQL Server,則可能需要:

(SELECT TOP 1 MAX(TYPE) AS TYPE,
 FROM (SELECT MO.CONT_NO, MO.TYPE, COUNT(*) C1
       FROM TABLE1.MORG MO 
       GROUP BY MO.CONT_NO, MO.TYPE
      ) DRT1  
 WHERE DRT1.CONT_NO = <external reference>.CONT_NO 
 GROUP BY CONT_NO
 HAVING COUNT (*) = 1 ANDSUM (C1) > 1
) 

也許最大的問題是WHERE DRT1.CONT_NO = CONT_NO CONT_NO引用DRTS.CONT_NO 它可能應該與外部查詢相關。

暫無
暫無

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

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