| 交易ID|仓库|公司简介|产品线类型|创建者|
| --|--|--|--|--|
| 57261018 |CA||收入||
| 57281538 |CA| 57281544 |资产| 57261018 |
| 57281544 |WY| 57281538 |INTERCOINCOME||
我得到错误“失败与无效的SQL语句.”我不知道为什么.我想在这里实现:
正如您所看到的,ACNOW_LINE_TYPE当INCOME时,这将是本例中的主记录。但是,此记录的WAREHOUSE列的值不正确,我们希望显示记录中的值,其中ACNOW_LINE_TYPE = INTERCOINCOME,也就是**“WY”。因此,在本例中,我们希望将“CA”替换为“WY”。我假设,如果我们将这些列中的各种值相互匹配,就可以实现这一点。我认为我们可以这样做:当记录Accounts_LINE_TYPE = ASSET时,Accounts_LINE_TYPE = INCOME且其TRANSACTION_ID与CREATED_FROM中的值匹配;当记录Accounts_LINE_TYPE = INTERCOINCOME时,则将INTERCOMPANY_ID中的值与TRANSACTION_ID匹配然后从WAREHOUSE中获取值“WY”,并粘贴到列WAREHOUSE**的记录中,在本例中,ACNOW_LINE_TYPE = INCOME。您能帮我解决这个问题吗?
我试过这个:
SELECT
T.id TRANSACTION_ID,
CASE
WHEN TL.accountinglinetype = 'INCOME' THEN (
SELECT
LOC2.fullname
FROM
transaction T2
LEFT JOIN transactionLine TL2 ON T2.id = TL2.transaction
LEFT JOIN location LOC2 ON LOC2.id = TL2.location
WHERE
T2.id = (
SELECT
T3.intercoTransaction
FROM
transaction T3
LEFT JOIN transactionLine TL3 ON T3.id = TL3.transaction
WHERE
TL3.createdFrom = T.id
AND TL3.accountinglinetype = 'ASSET'
)
AND TL2.accountinglinetype = 'INTERCOINCOME'
)
ELSE LOC.fullname
END AS WAREHOUSE,
T.intercoTransaction INTERCOMPANY_ID,
TL.accountinglinetype ACCOUNT_LINE_TYPE,
TL.createdFrom CREATED_FROM
FROM
transaction T
LEFT JOIN transactionLine TL ON T.id = TL.transaction
LEFT JOIN location LOC ON LOC.id = TL.location
字符串
2条答案
按热度按时间7dl7o3gd1#
您可以
LEFT OUTER JOIN
该表本身来查找资产的收入和公司间收入:字符串
其中,对于样本数据:
型
产出:
| 交易ID|仓库|公司简介|产品线类型|创建者|
| --|--|--|--|--|
| 57281538 |WY| 57281544 |资产| 57261018 |
| 57281544 |WY| 57281538 |INTERCOINCOME| * 空 *|
| 57261018 |CA| * 空 *| 收入| * 空 *|
fiddle
q5lcpyga2#
没有得到它在哪里把'WY'而不是'CA'的所有匹配或只是类型=资产或收入-所以我做了所有三个。你的真实的仓库是在最后3列的结果数据集(INTERCO_WH_ALL,INTERCO_WH_ASSET,INTERCO_WH_INCOME),你会采取一个符合你的预期结果。
示例数据和代码:
字符串
使用Case表达式和分析函数(Max()Over())的组合按虚拟列COMMON_ID对行进行分组。
... cte用于分组
型
M a i n S Q L:
型
.结果如下:
型