原始查询
SELECT DISTINCT
IP.op_code as ip_op_code,
IPH.op_code as iph_op_code,
debt_trans.tx_amount as cash,
DT.tx_amount as revenue
FROM debt_trans
LEFT JOIN debt_trans DT ON DT.debt_code=debt_trans.debt_code
LEFT JOIN instplan IP ON IP.debt_code=debt_trans.debt_code
LEFT JOIN instplanheader IPH ON IPH.debt_code=debt_trans.debt_code
AND debt_trans.tran_code NOT IN ('DR3001','DR3002','DR3003','DR3004','RP1800','CC5000')
AND debt_trans.tx_amount > 0
AND debt_trans.tx_date >= '2019-02-04' AND debt_trans.tx_date <= '2019-02-04'
AND IP.ipactualpaymentamt > 0
AND IP.tran_code NOT IN ('DR3001','DR3002','DR3003','DR3004','RP1800','CC5000')
AND IP.ipactualpaymentdt >= '2019-02-04' AND IP.ipactualpaymentdt <= '2019-02-04'
AND (IP.ipactualpaymentdt+debt_trans.tx_time)=(debt_trans.tx_date+debt_trans.tx_time)
AND DT.tran_code IN ('CC5000')
AND DT.tx_amount > 0.00
AND DT.tx_date >= '2019-02-04' AND DT.tx_date <= '2019-02-04'
AND DT.tx_date=debt_trans.tx_date
AND DT.tx_time=debt_trans.tx_time
AND IPH.ipplanid=IP.ipplanid
输出结果
Row Count : 4
[0] => Array
(
[ip_op_code] => DOMP
[iph_op_code] => DOMP
[cash] => 5.00
[revenue] => 2.25
)
[1] => Array
(
[ip_op_code] => DOMP
[iph_op_code] => DOMP
[cash] => 671.00
[revenue] => 301.95
)
[2] => Array
(
[ip_op_code] => RHYSL
[iph_op_code] => RHYSL
[cash] => 5.00
[revenue] => 2.25
)
[3] => Array
(
[ip_op_code] => RHYSL
[iph_op_code] => RHYSL
[cash] => 671.00
[revenue] => 301.95
)
预期结果
行数:2
[0] => Array
(
[ip_op_code] => DOMP
[iph_op_code] => DOMP
[cash] => 5.00
[revenue] => 2.25
)
[1] => Array
(
[ip_op_code] => RHYSL
[iph_op_code] => RHYSL
[cash] => 671.00
[revenue] => 301.95
)
我现在已经添加了完整的正确查询,我想做的是,请您帮我解决这个问题。
我有3张桌子。
debt_trans 计划 instplanheader
并且我必须再次加入btl_trans,因为我必须获得下一行。
当我加入instplan和instplanheader时,一切似乎都准备就绪了
答案 0 :(得分:0)
这意味着您的右表instplan
具有相同的debt_code
的多行。
让我展示我的意思:
DECLARE @TestTable TABLE
(
Col1 VARCHAR(10),
Col2 INT,
Col3 INT
)
DECLARE @TestTable2 TABLE
(
Col1 VARCHAR(10),
Col2 VARCHAR(10),
Col3 VARCHAR(10)
)
INSERT INTO @TestTable
(
Col1,
Col2,
Col3
)
VALUES
('A', 10, 20)
INSERT INTO @TestTable2
(
Col1,
Col2,
Col3
)
VALUES
('A', 'A', 'A')
, ('A', 'B', 'B')
, ('A', 'C', 'C')
和查询示例:
SELECT
distinct t1.Col1 t1_Col
, t2.Col1 t2_Col1
, t2.Col2 t2_Col2
, t2.Col3 t2_Col3
FROM @TestTable t1
LEFT JOIN @TestTable2 t2 ON t2.Col1 = t1.Col1
尽管如此,尽管我们使用DISTINCT关键字,但还是看到了三行。
输出:
t1_Col t2_Col1 t2_Col2 t2_Col3
A A A A
A A B B
A A C C
答案 1 :(得分:0)
查找您是否可以加入的数据还必须与op_code AND instplanheader.op_code = instplan.op_code
$sql = "SELECT DISTINCT
instplan.debt_code,
instplan.op_code,
instplanheader.op_code as plan_op,
instplan.ipactualpaymentamt
FROM instplanheader
LEFT JOIN instplan ON instplanheader.debt_code=instplan.debt_code
AND instplanheader.op_code = instplan.op_code
AND instplan.tran_code NOT IN ('DR3001','DR3002','DR3003','DR3004')
AND instplan.ipactualpaymentamt > 0.00
AND instplan.ipactualpaymentdt >= '2019-02-04' AND instplan.ipactualpaymentdt <= '2019-02-04'
AND instplanheader.iphcreationdate >= '2018-12-01' AND instplanheader.iphcreationdate <= '2019-02-04'
";
答案 2 :(得分:0)
这对我来说似乎是荒谬的:
AND i.ipactualpaymentdt >= '2019-02-04'
AND i.ipactualpaymentdt <= '2019-02-04'