我在文件中有以下3个字段:person_ows person_is_owed amount
示例内容:
Bob John 100
John Bob 110
SQL产生的结果是什么:
Bob John 100 110
John Bob 110 100
很抱歉,如果这是一个微不足道的问题,但我只是想学习SQL,我觉得它真的很像HELL!
答案 0 :(得分:0)
所以,你需要的是能够JOIN
两行。在这种情况下,您可能希望OUTER JOIN
假设每个都不匹配另一个匹配。现在,您只需要提出JOIN
条件,在这种情况下,这些条件将基于名称(person_owes
和person_is_owed
):
SELECT
T1.person_owes,
T1.person_is_owed,
T1.amount AS owes_amount,
COALESCE(T2.amount, 0) AS is_owed_amount
FROM
My_Table T1
LEFT OUTER JOIN My_Table T2 ON T2.person_is_owed = T1.person_owes
COALESCE
只是为了确保在没有匹配时您得到的值为0而不是NULL
。
此外,这假设只有person_owes
和person_is_owed
的每个组合中的一个。如果你可能有两行显示约翰欠了比尔两个不同数额的钱,那么你将不得不调整上面的SQL,它会有点复杂。
如果您打算多使用SQL,那么您应该花时间阅读一本(或更好)更多关于该主题的书。
答案 1 :(得分:0)
假设(person_ows, person_is_owed)
的组合是唯一的
select person_ows,
person_is_owed,
amount,
(select t2.amount
from the_table t2
where (t2.person_ows, t2.person_is_owed) = (t1.person_is_owed, t1.person_ows))
from the_table t1