我正在开发一个 SQL 查询来获取子事务的值,但我无法获得我正在寻找的结果。
我有两个提取数据的表,简化如下
表格交易
特兰尼德 | 身份证 | 价值 |
---|---|---|
A-01 | 23 | 问 |
B-01 | 50 | E |
B-02 | 80 | R |
B-03 | 81 | T |
表格 交易行
创建于 | 身份证 |
---|---|
空 | 23 |
23 | 50 |
23 | 80 |
23 | 81 |
需要的是获取二次交易第一次出现的价值。
EG
特兰尼德 | CHILD_TRANID | CHILD_VALUE |
---|---|---|
A-01 | B-01 | E |
我正在使用这些 SQL 查询,但我在 SQL 语句中收到错误“Column:TRANSACTION.TRANID not found”
SELECT
TR.TRANID,
TRP.CHILD_TRANID,
TRP.CHILD_VALUE
FROM
TRANSACTION TR
LEFT JOIN (
SELECT
TOP 1
_TR.TRANID AS TRANID_FWD,
_TR.VALUE,
_TRC.TRANID AS TRANID_PREV
FROM
TRANSACTION _TR
LEFT JOIN TRANSACTIONLINE _TL ON _TL.ID = _TR.ID
LEFT JOIN TRANSACTION _TRC ON _TL.CREATEDFROM = _TRC.ID
WHERE _TRC.TRANID = TR.TRANID
) TRP ON TRP.TRANID_PREV = TR.TRANID
WHERE
TR.TRANID = 'A-01';
我还可以使用其他方法吗?或者我的查询有什么问题吗?
为了达到预期的结果,请尝试使用 ROW_NUMBER() 对子事务进行排名并选择第一个出现的方法:
WITH RankedTransactions AS (
SELECT
TR.TRANID AS TRANID_PREV,
TRL.ID AS CHILD_ID,
CHILD.TRANID AS CHILD_TRANID,
CHILD.VALUE AS CHILD_VALUE,
ROW_NUMBER() OVER (PARTITION BY TR.TRANID ORDER BY CHILD.TRANID) AS row_num
FROM
TRANSACTION TR
LEFT JOIN TRANSACTIONLINE TRL ON TR.ID = TRL.CREATEDFROM
LEFT JOIN TRANSACTION CHILD ON TRL.ID = CHILD.ID
)
SELECT
TRANID_PREV AS TRANID,
CHILD_TRANID,
CHILD_VALUE
FROM
RankedTransactions
WHERE
TRANID_PREV = 'A-01' AND row_num = 1;