Sum 查询在 sqlite 中没有得到正确的输出
Sum query not getting right output in sqlite
你好朋友,我有 3 个 table 如下:
property_master -->p_id, p_name,r_id
transction_master -->t_id,p_id,amount,user_cat_id,r_id
user_trans_cat-->user_cat_id,cat_name,trans_id ,r_id
我的查询如下
SELECT property_master.p_id AS "Product Code",
property_master.p_name AS "Description",
(SELECT SUM(amount)
FROM transction_master ,property_master
JOIN user_trans_cat ON transction_master.user_cat_id = user_trans_cat.user_cat_id
WHERE user_trans_cat.trans_id =1 and transction_master.date between '2015-01-01' and '2015-12-31'
group by property_master.p_id
) AS "Income",
(SELECT SUM(amount)
FROM transction_master ,property_master
JOIN user_trans_cat ON transction_master.user_cat_id = user_trans_cat.user_cat_id
WHERE user_trans_cat.trans_id =2 and transction_master.date between '2015-01-01' and '2015-12-31'
group by property_master.p_id
) AS "Expense"
FROM property_master ,transction_master where property_master.r_id = 1
Group by property_master.p_id
交易table
输出来了
我想要根据 proeprty 明智的总收入和支出价值,但是当我 运行 以上查询时,它将为我提供所有 属性 的总收入价值,知道我该如何解决它吗?
下面怎么样 -
select
pm.p_id AS "Product Code",
pm.p_name AS "Description",
sum( case when utrc.trans_id =1 then tm.amount else 0 end ) as "Income",
sum( case when utrc.trans_id =2 then tm.amount else 0 end ) as "Expense"
from transction_master tm
join property_master pm on pm.p_id = tm.p_id
join user_trans_cat utrc on utrc.user_cat_id = tm.user_cat_id
where
tm.date between '2015-01-01' and '2015-12-31'
group by
pm.p_id
UPDATE : If you need all the property to be listed even if they are
not in transaction master then you need to change the query to select
from property_master and then left join as
from property_master pm
left join transction_master tm on pm.p_id = tm.p_id
left join user_trans_cat utrc on utrc.user_cat_id = tm.user_cat_id
现在 left join with where condition 只不过是 inner join 所以 where 条件需要移动为 joining condition 所以查询变成
select
pm.p_id AS "Product Code",
pm.p_name AS "Description",
sum( case when utrc.trans_id =1 then tm.amount else 0 end ) as "Income",
sum( case when utrc.trans_id =2 then tm.amount else 0 end ) as "Expense"
from property_master pm
left join transction_master tm on pm.p_id = tm.p_id
and tm.date between '2015-01-01' and '2015-12-31'
left join user_trans_cat utrc on utrc.user_cat_id = tm.user_cat_id
group by
pm.p_id
你可以试试这个伙伴:
SELECT
pm.p_id 'Product Code',
pm.p_name 'Description',
SUM(CASE WHEN utc.r_id = 1 THEN tm.amount ELSE 0 END) 'Income',
SUM(CASE WHEN utc.r_id = 2 THEN tm.amount ELSE 0 END) 'Expense'
FROM
transction_master tm
JOIN property_master pm ON tm.p_id = pm.p_id
JOIN user_trans_cat utc ON utc.trans_id = tm.t_id
WHERE
tm.date BETWEEN '2015-12-31' AND '2015-01-01'
GROUP BY
pm.p_id;
你好朋友,我有 3 个 table 如下:
property_master -->p_id, p_name,r_id
transction_master -->t_id,p_id,amount,user_cat_id,r_id
user_trans_cat-->user_cat_id,cat_name,trans_id ,r_id
我的查询如下
SELECT property_master.p_id AS "Product Code",
property_master.p_name AS "Description",
(SELECT SUM(amount)
FROM transction_master ,property_master
JOIN user_trans_cat ON transction_master.user_cat_id = user_trans_cat.user_cat_id
WHERE user_trans_cat.trans_id =1 and transction_master.date between '2015-01-01' and '2015-12-31'
group by property_master.p_id
) AS "Income",
(SELECT SUM(amount)
FROM transction_master ,property_master
JOIN user_trans_cat ON transction_master.user_cat_id = user_trans_cat.user_cat_id
WHERE user_trans_cat.trans_id =2 and transction_master.date between '2015-01-01' and '2015-12-31'
group by property_master.p_id
) AS "Expense"
FROM property_master ,transction_master where property_master.r_id = 1
Group by property_master.p_id
交易table
输出来了
下面怎么样 -
select
pm.p_id AS "Product Code",
pm.p_name AS "Description",
sum( case when utrc.trans_id =1 then tm.amount else 0 end ) as "Income",
sum( case when utrc.trans_id =2 then tm.amount else 0 end ) as "Expense"
from transction_master tm
join property_master pm on pm.p_id = tm.p_id
join user_trans_cat utrc on utrc.user_cat_id = tm.user_cat_id
where
tm.date between '2015-01-01' and '2015-12-31'
group by
pm.p_id
UPDATE : If you need all the property to be listed even if they are not in transaction master then you need to change the query to select from property_master and then left join as
from property_master pm
left join transction_master tm on pm.p_id = tm.p_id
left join user_trans_cat utrc on utrc.user_cat_id = tm.user_cat_id
现在 left join with where condition 只不过是 inner join 所以 where 条件需要移动为 joining condition 所以查询变成
select
pm.p_id AS "Product Code",
pm.p_name AS "Description",
sum( case when utrc.trans_id =1 then tm.amount else 0 end ) as "Income",
sum( case when utrc.trans_id =2 then tm.amount else 0 end ) as "Expense"
from property_master pm
left join transction_master tm on pm.p_id = tm.p_id
and tm.date between '2015-01-01' and '2015-12-31'
left join user_trans_cat utrc on utrc.user_cat_id = tm.user_cat_id
group by
pm.p_id
你可以试试这个伙伴:
SELECT
pm.p_id 'Product Code',
pm.p_name 'Description',
SUM(CASE WHEN utc.r_id = 1 THEN tm.amount ELSE 0 END) 'Income',
SUM(CASE WHEN utc.r_id = 2 THEN tm.amount ELSE 0 END) 'Expense'
FROM
transction_master tm
JOIN property_master pm ON tm.p_id = pm.p_id
JOIN user_trans_cat utc ON utc.trans_id = tm.t_id
WHERE
tm.date BETWEEN '2015-12-31' AND '2015-01-01'
GROUP BY
pm.p_id;