2010-09-08 104 views
0

此子查询的作品2005精简版4如何在SQL Server 2005 Compact Edition 3.1中进行此查询?在SQL Server

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) 

它如何在SQL Server 2005精简版3.1进行?

谢谢!

+0

一些重写你知道,它并没有在3.1的工作?查询在3.1中给出了具体的错误吗? – 2010-09-08 08:43:02

回答

0

您是否尝试用普通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 

或条件

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 
+0

感谢您的回答,我测试了这两个答案,但SQL Server 2005 Compact Edition 3.1不支持这样的子查询:(... – JulyPeace 2010-09-23 08:54:09