我是一个SQL newby,我正在努力应对以下(简化)查询。
它必须使用公共帐号字段从主文件(主)和当前表(nTrans)和历史表(nTransArc)中的关联事务中提取帐号。这很好。
我无法工作的部分是它还需要使用nTrans / nTransArc表中的TranCode和VTranCode之间的链接从VatTrans(Current)和VatTransArc(History)表中提取Vat事务。 VatTrans / VatTransArc表。这是行之间的红色代码(以及后来的INNER JOIN)。
有人可以帮忙吗?
SELECT Mast.MAccNo,
Tran.TAccNo,Tran.TranCode,
Vat.VTranCode,Vat.TaxCode
FROM (SELECT AccNo,TranCode FROM nTrans
UNION ALL SELECT AccNo,TranCode FROM nTransArc)
'-------------------------------------------------------'
FROM (SELECT VTranCode,TaxCode FROM VatTrans
UNION ALL SELECT VTranCode,TaxCode FROM VatTransArc)
'-------------------------------------------------------'
Tran JOIN Master Mast ON Tran.TAccNo = Mast.MAccNo
INNER JOIN Vat ON Vat.VTranCode = Tran.TranCode
ORDER BY Mast.MAccNo
答案 0 :(得分:1)
我最好的猜测:
SELECT
m.MAccNo,
t.TranCode,
v.TaxCode,
vt.taxcode
FROM
Master m inner JOIN
(SELECT
AccNo,TranCode
FROM
nTrans
UNION ALL
SELECT
AccNo,TranCode
FROM
nTransArc) t ON
m.MAccNo = t.TAccNo INNER JOIN
(select
TaxCode,
VTranCode
from
Vat
union all
SELECT
TaxCode,
VTranCode
FROM
VatTrans
UNION ALL
SELECT
TaxCode,
VTranCode
FROM
VatTransArc) v ON
v.VTranCode = t.TranCode
ORDER BY
m.MAccNo
答案 1 :(得分:1)
当我阅读你的问题时,我相信以下内容可以帮助你:
SELECT m.MAccNo
, t.TAccNo
, t.TranCode
, v.VTranCode
, v.TaxCode
FROM Master m
INNER JOIN nTrans t ON t.TAccNo = m.MAccNo
INNER JOIN VatTrans v ON v.VTranCode = t.TranCode
UNION ALL
SELECT m.MAccNo
, t.TAccNo
, t.TranCode
, v.VTranCode
, v.TaxCode
FROM Master m
INNER JOIN nTransArc t ON t.TAccNo = m.MAccNo
INNER JOIN VatTransArc v ON v.VTranCode = t.TranCode
ORDER BY m.MAccNo
这会在一个查询中获取所有当前数据,然后在第二个查询中获取所有历史数据,然后合并结果。
答案 2 :(得分:0)
我不确定你使用的是什么版本的sql,但这更具可读性。此外,如果您经常对归档表执行此类union all
,则应考虑添加视图。
; WITH Trans AS (
SELECT AccNo,TranCode
FROM nTrans
UNION ALL
SELECT AccNo,TranCode
FROM nTransArc
), WITH Vats AS (
SELECT TaxCode,VTranCode
FROM Vat
union all
SELECT TaxCode,VTranCode
FROM VatTrans
UNION ALL
SELECT TaxCode,VTranCode
FROM VatTransArc
)
SELECT
m.MAccNo,
t.TranCode,
v.TaxCode,
vt.taxcode
FROM Master m
INNER JOIN Trans t
ON m.MAccNo = t.TAccNo
INNER JOIN Vats v ON
v.VTranCode = t.TranCode
ORDER BY m.MAccNo