SQL-根据条件从多个源之一获取值
我有以下表格结构: 事务表SQL-根据条件从多个源之一获取值,sql,Sql,我有以下表格结构: 事务表 transactID TBarcode Ecode PAICID status 1 1234 E001 1 0 2 4567 E002 2 1 SELECT TransactionTable.TransactID, TransactionTable.TBarCode, TransactionTable.ECode,
transactID TBarcode Ecode PAICID status
1 1234 E001 1 0
2 4567 E002 2 1
SELECT TransactionTable.TransactID,
TransactionTable.TBarCode,
TransactionTable.ECode,
TransactionTable.PAICID,
TransactionTable.Status,
EmployeeMasterTable.Ename
FROM TransactionTable
LEFT JOIN UserMasterTable
ON UserMasterTable.ECode = TransactionTable.ECode
AND TransactionTable.Status = 0
INNER JOIN EmployeeMasterTable
ON EmployeeMasterTable.ECode = COALESCE(UserMasterTable.ECode, TransactionTable.ECode)
WHERE TransactionTable.BarCode = '1234';
用户主表
Uid Uname Ecode
1 jas E001
2 biju E002
Ecode Ename
E001 Jaseem
E002 bijeesh
雇员主表
Uid Uname Ecode
1 jas E001
2 biju E002
Ecode Ename
E001 Jaseem
E002 bijeesh
TransactionTable.PAICD
和UserMasterTable.Uid
是相同的
我正在搜索TBarcde
(我指的是类似的条件,其中Tbarcode=1234
)
如果status
为0,则我需要与TransactionTable.Ecode
相关的Ename
如果status
为1,则我想从UserMasterTable.Ecode
的相应PAICID
Ename中获取Ename
如何为此编写存储过程?您不需要存储过程。以下查询将满足您的需要: 它直接通过
UserMasterTable
在EmployeeMasterTable
上加入TransactionTable
,然后根据状态标准从适当的加入员工表中选择Ename
SELECT
t.*,
CASE
WHEN t.status = 0
THEN e0.Ename
ELSE e1.Ename
END AS Ename
FROM TransactionTable AS t
LEFT JOIN EmployeeMasterTable AS e0
ON t.Ecode = e1.Ecode
LEFT JOIN UserMasterTable AS u
ON t.PAICID = u.Uid
LEFT JOIN EmployeeMasterTable AS e1
ON u.Ecode = e1.Ecode
WHERE TBarcode = 1234
如果在存储过程中确实需要它,请参考DBMS的文档了解如何实现。可能是这样的
CREATE PROCEDURE MyProcedure (IN iTBarcode INT)
BEGIN
SELECT
t.*,
CASE
WHEN t.status = 0
THEN e0.Ename
ELSE e1.Ename
END AS Ename
FROM TransactionTable AS t
LEFT JOIN EmployeeMasterTable AS e0
ON t.Ecode = e1.Ecode
LEFT JOIN UserMasterTable AS u
ON t.PAICID = u.Uid
LEFT JOIN EmployeeMasterTable AS e1
ON u.Ecode = e1.Ecode
WHERE TBarcode = iTBarcode
END
您需要
LEFT JOIN
到UsermasterTable,将状态置于连接条件中,然后可以使用COALESCE内部连接EmployeeMasterTable,以便在UsermasterTable中有匹配项时使用该项中的ECode,否则使用TransactionTable中的ECode
transactID TBarcode Ecode PAICID status
1 1234 E001 1 0
2 4567 E002 2 1
SELECT TransactionTable.TransactID,
TransactionTable.TBarCode,
TransactionTable.ECode,
TransactionTable.PAICID,
TransactionTable.Status,
EmployeeMasterTable.Ename
FROM TransactionTable
LEFT JOIN UserMasterTable
ON UserMasterTable.ECode = TransactionTable.ECode
AND TransactionTable.Status = 0
INNER JOIN EmployeeMasterTable
ON EmployeeMasterTable.ECode = COALESCE(UserMasterTable.ECode, TransactionTable.ECode)
WHERE TransactionTable.BarCode = '1234';
我是存储过程新手,,,所以我在想如何写这个??你说的“take”和“show”是什么意思?我会检查并让你知道,,,编辑以添加TBarcode条件并充实存储过程,同时执行第一个过程,在关键字“ELSE”附近显示错误语法。我现在已经删除了它,我误读了你的标准,找到了一个不需要案例陈述的解决方案好的创造性解决方案+1.