简体   繁体   English

如何在SQL Server 2005 Compact Edition 3.1中进行此查询?

[英]How can I make this query in SQL Server 2005 Compact Edition 3.1?

this subquery works in SQL Server 2005 Compact Edition 4 此子查询在SQL Server 2005 Compact Edition 4中有效

 SELECT TableA.serialNo  
 FROM   TableA,
        (SELECT MAX(TableB.lotNo) AS lotNo,TableA.codeA,TableA.codeB
         FROM   TableA, TableB
         WHERE  (TableA.codeA =TableB.codeA)
                AND (TableA.codeB = TableB.codeB)
                AND ((LEN(TableA.openDate) > 0) OR TableA.openDate IS NOT NULL)
         GROUP BY 
                TableA.codeA, TableA.codeB) a  
 WHERE  (TableA.lotNo < a.lotNo)  
        AND (TableA.codeA = a.codeA)  
        AND (TableA.codeB = a.codeB) 
        AND ((LEN(TableA.endDate) = 0) OR TableA.endDate IS NULL)

How can It be made in SQL Server 2005 Compact Edition 3.1? 如何在SQL Server 2005 Compact Edition 3.1中进行制作?

Thanks! 谢谢!

Have you tried replacing the (less readable imho) join syntax with plain INNER JOINS ? 您是否尝试过用普通的INNER JOINS替换(不太可读的imho)连接语法?

    SELECT  TableA.serialNo   
    FROM    TableA
            INNER JOIN (
              SELECT  MAX(TableB.lotNo) AS lotNo
                      ,TableA.codeA
                      ,TableA.codeB 
              FROM    TableA
                      INNER JOIN TableB ON TableA.codeA = TableB.codeA
                                           AND TableA.codeB = TableB.codeB
              WHERE   LEN(TableA.openDate) > 0
                      OR TableA.openDate IS NOT NULL
              GROUP BY  
                      TableA.codeA, TableA.codeB
            ) a  ON TableA.lotNo < a.lotNo
                    AND TableA.codeA = a.codeA
                    AND TableA.codeB = a.codeB
    WHERE   LEN(TableA.endDate) = 0
            OR TableA.endDate IS NULL

or some rewriting of the conditions 或重写条件

SELECT  a1.serialNo   
FROM    TableA a1
        INNER JOIN (
          SELECT  MAX(b.lotNo) AS lotNo
                  , a.codeA
                  , a.codeB 
          FROM    TableA a
                  INNER JOIN TableB b ON a.codeA = b.codeA
                                         AND a.codeB = b.codeB
          WHERE   a.openDate IS NOT NULL
          GROUP BY  
                  a.codeA, a.codeB
        ) a2  ON a1.lotNo < a2.lotNo
                 AND a1.codeA = a2.codeA
                 AND a1.codeB = a2.codeB
WHERE   LEN(COALESCE(a1.endDate, '')) = 0

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM