>我有一个表格DailyTransaction,它包含日常商店交易,如销售,购买,银行收据和凭证以及费用凭证等,
主表:每日交易
SNo Mode title
---------------------------------------
1 1 Sales
2 1 Sales
3 3 Bank Payment
4 2 Purchase
5 1 Sales
6 2 Purchase
7 2 Purchase
8 1 Sales
9 3 Bank Payment
表:销售额
SNo DSNo Amount
---------------------------------------
101 1 200
102 2 500
103 5 800
104 8 250
表:购买
SNo DSNo Amount
---------------------------------------
201 7 850
202 6 525
203 7 650
表:银行
SNo DSNo Amount
------------------------------------
301 3 450
302 9 875
我的要求是
SNo Mode title DSNo Amount
-----------------------------------------------------------------
1 1 Sales1 101 200
2 1 Sales 102 500
3 3 Bank Payment 301 450
4 2 Purchase 201 850
5 1 Sales 103 800
6 2 Purchase 202 525
7 2 Purchase 203 650
8 1 Sales 104 250
9 3 Bank Payment 302 875
列DSNo
是主表的主SNo
列 每日事务列模式指定事务的类型。
请协助我如何获得预期的输出?
您的表结构使这比其他方式更难(例如,为什么销售、采购和银行有 3 个单独的表,而不是一个带有标志的表,用于表示它是什么类型?),但此查询应该为您提供所需的内容:
SELECT
dt.SNo
, dt.Mode
, dt.title
, COALESCE(Sales.SNo, Purchase.SNo, Bank.SNo) AS DSNo
, COALESCE(Sales.Amount, Purchase.Amount, Bank.Amount) AS Amount
FROM DailyTransaction AS dt
LEFT JOIN Sales ON dt.SNo = Sales.DSNo
LEFT JOIN Purchase ON dt.SNo = Purchase.DSNo
LEFT JOIN Bank ON dt.SNo = Bank.DSNo
当然,问题是您希望根据交易类型显示来自不同表的"金额"列,这使得它比简单的连接稍微复杂一些。不过,肖恩在评论中链接到的文章绝对是一个很好的阅读。