Вычитание двух строк из одной таблицы на основе даты и часа - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть две таблицы, к которым я хотел бы присоединиться.

Таблица A

  Date     | Hour | Direction | Qty 
2018-11-20    1      DE/UK       2 
2018-11-20    2      DE/UK       6 

Таблица B

   Date    | Hour | Area  | Price
2018-11-20    1      DE       5 
2018-11-20    2      DE       4 
2018-11-20    1      UK       3 
2018-11-20    2      UK       9 

Я хочу присоединиться к ним следующим образом:

Таблица C

 Date     | Hour | Direction | Qty | AreaFrom | AreaTo | PriceFrom | PriceTo | Profit
2018-11-20    1      DE/UK       2      DE       UK         5           3      3-5 = -2
2018-11-20    2      DE/UK       6      DE       UK         4           9        5

Я пробовал CROSS Join и другие виды объединений, но не смог заставить его работать.

Другие связанные с этим вопросы, которые я рассмотрел до сих пор:

SQL вычитает две строки на основе даты и другого столбца

Выбор двух строк из одной таблицы

1 Ответ

0 голосов
/ 26 ноября 2018

Это может быть не так сложно, как видит Адам.Если бы в TableA были столбцы «directionFrom» и «directionTo», вы, вероятно, решили бы это самостоятельно.Итак, давайте разделим поле направления на два столбца:

SELECT 
  a.[Date], a.[Hour], a.Direction, a.Qty, 
  f.Area as AreaFrom, t.Area as AreaTo, 
  f.Price as priceFrom, t.Price as PriceTo, 
  t.Price-f.Price as profit
FROM 
  TableA a
  INNER JOIN TableB f 
  ON 
    a.[Date] = f.[Date] and 
    a.Hour = b.[Hour] and
    LEFT(a.Direction, 2) = f.Area --take the left two as the area from
  INNER JOIN TableB t 
  ON 
    a.[Date] = t.[Date] and 
    a.Hour = t.[Hour] and
    RIGHT(a.Direction, 2) = t.Area --take the right two as the area to

Если у вас когда-либо есть области с более чем двумя буквенными кодами, вам придется ПОДПИСАТЬСЯ на CHARINDEX для / вместо

...