2016-02-23 66 views
0

我想选择表1和表2列,但我不能选择他们选择列:上加入2个表

SELECT table1._____ 
    ,table2.____ 
    FROM 
    (
    SELECT TOP 1 ALLOCATIONS_FW.VEHICLE_ID_FW 
    ,ALLOCATIONS_FW.END_DATE_FW 
    ,ALLOCATIONS_FW.START_DATE_FW 
    ,ALLOCATIONS_FW.LOCATION_CODE_FW 
    ,ALLOCATIONS_FW.COMPANY_CODE_FW 
    ,ALLOCATIONS_FW.VEHICLE_RECORD_NUMBER_FW 
    FROM ALLOCATIONS_FW 
    WHERE ALLOCATIONS_FW.START_DATE_FW = (SELECT MAX(ALLOCATIONS_FW.START_DATE_FW) 
      FROM ALLOCATIONS_FW 
      WHERE ALLOCATIONS_FW.VEHICLE_ID_FW IN 
        (SELECT VEHICLE_ID_FW FROM ALLOCATIONS_FW WHERE VEHICLE_ID_FW = ALLOCATIONS_FW.VEHICLE_ID_FW) 
      AND ALLOCATIONS_FW.RECORD_NUMBER_FW = %RECORD_NUMBER_FW% 
      ) 
    AND ALLOCATIONS_FW.RECORD_NUMBER_FW = %RECORD_NUMBER_FW% 
    ) AS table1 
    JOIN 
    (
    SELECT TOP 1 ALLOCATIONS_FW.VEHICLE_ID_FW 
    ,ALLOCATIONS_FW.END_DATE_FW 
    ,ALLOCATIONS_FW.START_DATE_FW 
    ,ALLOCATIONS_FW.LOCATION_CODE_FW 
    ,ALLOCATIONS_FW.COMPANY_CODE_FW 
    ,ALLOCATIONS_FW.DRIVER_NAME_FW 
    FROM ALLOCATIONS_FW 
    WHERE VEHICLE_ID_FW=(SELECT VEHICLE_ID_FW FROM ALLOCATIONS_FW 
          WHERE ALLOCATIONS_FW.RECORD_NUMBER_FW = %RECORD_NUMBER_FW%) 
    AND END_DATE_FW = (SELECT MAX(ALLOCATIONS_FW.END_DATE_FW) 
      FROM ALLOCATIONS_FW 
      WHERE VEHICLE_ID_FW=ALLOCATIONS_FW.VEHICLE_ID_FW) 

    ORDER BY ALLOCATIONS_FW.START_DATE_FW DESC 
    ) AS OLDALLOC 
    ON table1.column1=table2.column1 

我想选择Table 1和表2列,我会怎么做?因为我试过

table1.VEHICLE_ID_FW 
table1.ALLOCATIONS_FW.VEHICLE_ID_FW 

既没有工作

+0

1.你是什么意思,它不工作? 2.您的查询中没有table2,第二个派生表的别名是oldalloc。 – Shadow

+0

你的第二个派生表别名不是'table2',它是'OLDALLOC'也许这就是我上面选择的问题 –

+0

...我必须从table1中获取值。当我尝试使用SELECT table1._____时,表1中的列未出现 – pretzels04

回答

0

试试这个样子,你不应该被子句的子查询中使用的顺序。我刚刚评论。请试试这个。

SELECT * 
FROM (
    SELECT TOP 1 ALLOCATIONS_FW.VEHICLE_ID_FW 
     ,ALLOCATIONS_FW.END_DATE_FW 
     ,ALLOCATIONS_FW.START_DATE_FW 
     ,ALLOCATIONS_FW.LOCATION_CODE_FW 
     ,ALLOCATIONS_FW.COMPANY_CODE_FW 
     ,ALLOCATIONS_FW.VEHICLE_RECORD_NUMBER_FW 
    FROM ALLOCATIONS_FW 
    WHERE ALLOCATIONS_FW.START_DATE_FW = (
      SELECT MAX(ALLOCATIONS_FW.START_DATE_FW) 
      FROM ALLOCATIONS_FW 
      WHERE ALLOCATIONS_FW.VEHICLE_ID_FW IN (
        SELECT VEHICLE_ID_FW 
        FROM ALLOCATIONS_FW 
        WHERE VEHICLE_ID_FW = ALLOCATIONS_FW.VEHICLE_ID_FW 
        ) 
       AND ALLOCATIONS_FW.RECORD_NUMBER_FW = % RECORD_NUMBER_FW % 
      ) 
     AND ALLOCATIONS_FW.RECORD_NUMBER_FW = % RECORD_NUMBER_FW % 
    ) AS table1 
INNER JOIN (
    SELECT TOP 1 ALLOCATIONS_FW.VEHICLE_ID_FW 
     ,ALLOCATIONS_FW.END_DATE_FW 
     ,ALLOCATIONS_FW.START_DATE_FW 
     ,ALLOCATIONS_FW.LOCATION_CODE_FW 
     ,ALLOCATIONS_FW.COMPANY_CODE_FW 
     ,ALLOCATIONS_FW.DRIVER_NAME_FW 
    FROM ALLOCATIONS_FW 
    WHERE VEHICLE_ID_FW = (
      SELECT VEHICLE_ID_FW 
      FROM ALLOCATIONS_FW 
      WHERE ALLOCATIONS_FW.RECORD_NUMBER_FW = % RECORD_NUMBER_FW % 
      ) 
     AND END_DATE_FW = (
      SELECT MAX(ALLOCATIONS_FW.END_DATE_FW) 
      FROM ALLOCATIONS_FW 
      WHERE VEHICLE_ID_FW = ALLOCATIONS_FW.VEHICLE_ID_FW 
      ) 
    --ORDER BY ALLOCATIONS_FW.START_DATE_FW DESC 
    ) AS OLDALLOC ON table1.column1 = table2.column1 
+0

请试试这个和让我知道你的结果,我无法理解你为什么使用top 1。 – StackUser