2013-09-19 2 views
1

Использование SQL Server 2008Несколько подзапросы с соединениями и вычисление по псевдониму столбца в SQL Server 2008

ПРОБЛЕМА Я унаследовал некоторый код, который содержит вложенные подзапросы с соединениями. Теперь мне нужно добавить выходной столбец, который вычисляет два столбца уже в таблице. Комбинация (подзапросы, объединения, псевдонимы столбцов)> Me. Спасибо за помощь!

ТОК КОД

SELECT TABLE1.externalid, TABLE1.startdate, TABLE1.enddate, TABLE1.Price, 
    DATEDIFF(D,TABLE1.startdate,TABLE1.enddate) AS [Days], 
    TABLE2.UserDefinedIndex, TABLE2.commodity, 


    (SELECT TOP 1 DATE 
     FROM (SELECT TOP 
       (SELECT CASE COUNT(*) WHEN 0 THEN 1 ELSE COUNT(*) END -1 
       FROM TABLE3 WHERE UserDefinedIndex = 'L' AND DATE < TABLE1.startdate 
        AND DATE BETWEEN CAST(Table1.startdate as datetime)-6 AND TABLE1.startdate 
      )* 
      FROM TABLE3 WHERE UserDefinedIndex = 'L' AND DATE < TABLE1.startdate 
       AND DATE BETWEEN CAST(TABLE1.startdate as datetime)-6 AND TABLE1.startdate 
       ORDER BY DATE 
      ) AS A ORDER BY DATE DESC 
     )  AS Final_Pricing_Date, 

    (SELECT TOP 1 PRICE 
     FROM (SELECT TOP 
       (SELECT CASE COUNT(*) WHEN 0 THEN 1 ELSE COUNT(*) END -1 
       FROM TABLE3 WHERE UserDefinedIndex = 'L' AND DATE < TABLE1.startdate 
        AND DATE BETWEEN CAST(Table1.startdate as datetime)-6 AND TABLE1.startdate 
       )* 
      FROM TABLE3 WHERE UserDefinedIndex = 'L' AND DATE < TABLE1.startdate 
       AND DATE BETWEEN CAST(TABLE1.startdate as datetime)-6 AND TABLE1.startdate ORDER BY DATE 
      ) AS A ORDER BY DATE DESC 
     )/100 AS Final_Price 

FROM TABLE1 INNER JOIN TABLE2 
    ON TABLE1.underlying= TABLE2.underlying 

ХОЧЕТ ВЫХОДА мне нужно что-то, что позволит мне вернуться расчет на [Final_Price]. Текущие столбцы вывода являются: ExternalId, StartDate, EndDate, Цена, дни, UserDefinedIndex, товар, Final_Pricing_Date, Final_Price

Я хочу добавить столбец [PriceDelta] в конце, который будет TABLE1.Price - Final_Price

Спасибо!

+0

Один из лучших вопросов, которые я видел. Очень хорошо организован и до предела! Хотел бы я дать вам больше голосов! –

ответ

2

Самый простой способ без полной перезаписи запроса - использовать другой подзапрос, обернуть весь существующий запрос и затем использовать столбцы внутреннего запроса для расчета.

SELECT A.*, 
     A.Price - A.[Final_Price] AS [PriceDelta] 
FROM (
     SELECT TABLE1.externalid, TABLE1.startdate, TABLE1.enddate, TABLE1.Price, 
      DATEDIFF(D,TABLE1.startdate,TABLE1.enddate) AS [Days], 
      TABLE2.UserDefinedIndex, TABLE2.commodity, 


      (SELECT TOP 1 DATE 
       FROM (SELECT TOP 
         (SELECT CASE COUNT(*) WHEN 0 THEN 1 ELSE COUNT(*) END -1 
         FROM TABLE3 WHERE UserDefinedIndex = 'L' AND DATE < TABLE1.startdate 
          AND DATE BETWEEN CAST(Table1.startdate as datetime)-6 AND TABLE1.startdate 
        )* 
        FROM TABLE3 WHERE UserDefinedIndex = 'L' AND DATE < TABLE1.startdate 
         AND DATE BETWEEN CAST(TABLE1.startdate as datetime)-6 AND TABLE1.startdate 
         ORDER BY DATE 
        ) AS A ORDER BY DATE DESC 
       )  AS Final_Pricing_Date, 

      (SELECT TOP 1 PRICE 
       FROM (SELECT TOP 
         (SELECT CASE COUNT(*) WHEN 0 THEN 1 ELSE COUNT(*) END -1 
         FROM TABLE3 WHERE UserDefinedIndex = 'L' AND DATE < TABLE1.startdate 
          AND DATE BETWEEN CAST(Table1.startdate as datetime)-6 AND TABLE1.startdate 
         )* 
        FROM TABLE3 WHERE UserDefinedIndex = 'L' AND DATE < TABLE1.startdate 
         AND DATE BETWEEN CAST(TABLE1.startdate as datetime)-6 AND TABLE1.startdate ORDER BY DATE 
        ) AS A ORDER BY DATE DESC 
       )/100 AS Final_Price 

     FROM TABLE1 INNER JOIN TABLE2 
      ON TABLE1.underlying= TABLE2.underlying 
    ) AS A 
+0

Супер легкий в использовании. благодаря – dharol

 Смежные вопросы

  • Нет связанных вопросов^_^