我正在编写一个 foxpro sql & 需要将三个不同表中的三个日期列组合成一个新的日期列。例如,如果三个表是 A、B 和 C,并且日期列是 Adate、Bdate 和 Cdate,我如何将它们作为不同且单独的日期组合到名为 TransDate 的列中并在 SQL 中?如果可能的话,我会很感激代码示例,因为我对此很陌生
2 回答
新的答案选项...根据您关于购买、库存调整或销售的评论,并且没有任何您希望看到的清晰描述或输出样本,我认为您想要类似...
表 A = 采购 表 B = 调整 表 C = 销售
不确定我是否同意这种结构,但只能从简短的描述中暗示。我认为您想要更多的“分类帐”样式摘要
购买 1 月 10 日 购买 1 月 15 日 销售 2 月 2 日 调整 2 月 10 日 购买 2 月 15 日 等等...
然后,我会做一个 UNION
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
如果我的假设不正确,请为我自己和其他人提供更多此类事务、数据布局等的样本……不需要实时数据,也不需要完整的表结构或实际表名。但是,我们确实需要更多的合作,特别是如果您将来需要帮助,否则,人们可能会拒绝您的请求。
是的,需要更多的日期说明。您不能将 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
同样,我不知道您的三个表之间共有的“键”是什么,因此您显然必须根据该元素是什么来调整查询。