Как мне ссылаться на первую таблицу в многостольном формате? - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь использовать оператор Multi Table From для сравнения всех записей в двух разных отфильтрованных представлениях одной и той же таблицы. Результаты, похоже, ожидаемые, однако, когда я пытаюсь присоединиться к другой таблице, используя concat () для создания комбинированного ключа, SSMS возвращает следующую ошибку.

Ошибка:

Не удалось связать многокомпонентный идентификатор "a.ccustno1".

Пример кода:

Select *
  From (Select ccustno AS 'ccustno1' 
          From table1 
         Where orderdate = cast(Getdate() AS Date)) a, 
               (Select ccustno AS 'ccustno2' 
                  From table1 
                 Where (orderdate >= dateadd(day, 0, getdate()))) b
           Join table2 c 
             ON c.custkey = concat(a.ccustno1, b.ccustno2)

Контекст и дополнительный вопрос:

Для результатов я пытаюсь сгенерировать список всех клиентов в первом отфильтрованном представлении, встроенный со всеми клиентами во втором отфильтрованном представлении, чтобы я мог добавить третью таблицу, в которой указаны их относительные расстояния друг от друга. Первая таблица представляет собой список заказов, отфильтрованных за сегодня (первое представление) и после сегодняшнего дня (второе представление). Вторая таблица использует lat и long для расчета радиального расстояния и фильтруется по тому, как далеко мы готовы пройти дополнительные заказы по округам. Я хочу использовать местоположения сегодняшних заказов, чтобы сказать мне, какие другие существующие заказы мы могли бы разумно доставить сегодня для эффективности.

Есть ли более простой способ сделать это?

1 Ответ

0 голосов
/ 24 августа 2018

Не используйте запятые. Они происходят в непредсказуемом порядке по сравнению с явными объединениями, в этом случае система пытается выполнить объединение между b и c до того, как применяет перекрестное соединение (запятую) между a и результат объединения b и c.

Вместо этого используйте явное перекрестное соединение:

Select *
From (Select ccustno AS ccustno1 
      From table1 
     Where orderdate = cast(Getdate() AS Date)) a
       cross join
           (Select ccustno AS ccustno2 
              From table1 
             Where (orderdate >= dateadd(day, 0, getdate()))) b
       Join table2 c 
         ON c.custkey = concat(a.ccustno1, b.ccustno2)

(я все еще не уверен, что условие окончательного соединения имеет смысл смысл , потому что я не ожидал, что смогу взять два номера клиентов (при условии, что я правильно интерпретирую ваши имена) и объединить их вместе, чтобы сделать ключ клиента)

...