Как объединить 3 столбца даты из 3 таблиц в Foxpro sql? - PullRequest
0 голосов
/ 30 апреля 2010

Я пишу foxpro sql и мне нужно объединить три столбца даты из трех разных таблиц в новый столбец даты. Например, если тремя таблицами являются A, B и C, а столбцами даты - Adate, Bdate и Cdate, как мне объединить их как отдельные и отдельные даты в столбец с именем TransDate и в SQL? Буду признателен за примеры кода, если это возможно, так как я очень новичок в этом

Ответы [ 2 ]

0 голосов
/ 03 мая 2010

Новый вариант ответа ... из вашего комментария о покупке, или о корректировке или продаже акций, и без какого-либо четкого описания или образца результатов, которые вы бы хотели увидеть, я думаю, что вы хотите что-то вроде .. .

Таблица A = Покупки Таблица B = Корректировки Таблица C = Продажи

Не уверен, что я согласился бы с этой конструкцией, но могу подразумевать только из кратких описаний. Я думаю, что вы хотите больше резюме стиля "бухгалтерской книги"

Покупка 10 января Покупка 15 января Распродажа 2 февраля Корректировка 10 февраля Покупка 15 февраля и т.д ...

Тогда я бы сделал СОЮЗ

select  
      "Purchase   " as TransType,
      T1.ADate as TransDate
   from
      YourTableA T1
   where 
      T1.IDKey = ?SomeValueSuchAsAccount
   order by
      TransDate
UNION ALL
select
      "Adjustments" as TransType,
      T2.BDate as TransDate
   from
       YourTableB T2
   where 
      T2.IDKey = ?SomeValueSuchAsAccount
UNION ALL
select
      "Sales      " as TransType,
      T3.CDate as TransDate
   from
       YourTableB T3
   where 
      T3.IDKey = ?SomeValueSuchAsAccount

Если я ошибаюсь в своих предположениях, пожалуйста, предоставьте себе и другим немного больше примеров таких транзакций, размещения данных и т. Д. Не требуется никаких данных в реальном времени, как и полные структуры таблиц или реальные имена таблиц , Однако нам действительно нужно больше работать, особенно если вам нужна помощь в будущем, иначе люди могут просто пострадать от ваших запросов.

0 голосов
/ 30 апреля 2010

Да, требуется уточнение даты. Вы не можете объединить 3 в 1 ... или вы имели в виду, что вам нужна 1 строка результатов, которая показывает все 3 даты, связанные с данной транзакцией? Или вы хотите (например) РАННУЮ из 3 дат, чтобы определить дату начала первой транзакции? В любом случае, пожалуйста, уточните свой вопрос, но вот возможные варианты для вас, не зная больше структур вашей таблицы ... Кроме того, если вы делаете это непосредственно из таблиц foxpro (VFP), вам придется явно добавить ";" в качестве продолжения строки к следующим утверждениям

select 
      T1.ADate,
      T2.BDate,
      T3.CDate,
      iif( T1.ADate > T2.BDate and T1.ADate > T3.CDate, T1.ADate,
           iif( T2.BDate > T1.ADate and T2.BDate > T3.CDate, 
               T2.BDate, T3.CDate ) ) as LargestDate,
      iif( T1.ADate < T2.BDate and T1.ADate < T3.CDate, T1.ADate,
           iif( T2.BDate < T1.ADate and T2.BDate < T3.CDate, 
               T2.BDate, T3.CDate ) ) as EarliestDate
   from 
      YourTableA T1,
      YourTableB T2,
      YourTableC T3
   where 
          T1.IDKey = T2.IDKey
      AND T1.IDKey = T3.IDKey
   into 
      cursor C_SomeTestResultCursor

Опять же, я не знаю, каков ваш "Ключ", который будет общим для всех ваших трех таблиц, поэтому вам, очевидно, придется скорректировать запрос в зависимости от того, является ли этот элемент (элементы).

...