加入 2 个表错误
Joining 2 tables error
我正在尝试加入 2 tables 以获得输出报告。涉及的 table 是股票和每日销售额 table。
股票和每日销售 tables:
所需的输出格式:
我正在尝试使用以下查询加入 2 tables
Select item,article,sold,stockonhand
from stock S
left join dailysales as D on S.item=D.item
group by item
我希望输出包括股票 table 中的所有行。比如有存货,但没有卖掉,也要列入报表。目前我的报告没有显示,(有货但未售出)。
希望您能理解我的上下文或指出我可以阅读的教程。我试着搜索了几天,但找不到适合我的确切问题。
未测试 -
select item,article,sum(sold),sum(stockonhand)-sum(sold) from (
select a.item,a.article,a.stockonhand,case when b.sold is null then 0 else b.sold end as sold
from stock a left join dailysales b on (a.item = b.item))
group by item,article;
它基本上是左连接并将 0 放在空列上(之后求和)
然后总结 select 中所有列的结果分组(你的查询出了什么问题)
简单地 LEFT JOIN
两个 table(也得到长笛),做一个 GROUP BY
,然后 SUM
卖出:
select s.item, s.article, coalesce(SUM(d.sold),0) as "qty sold", s.stockonhand
from stock S
left join dailysales as D on S.item=D.item
group by s.item, s.article, s.stockonhand
对于未售出的商品,coalesce
可将 NULL
替换为 0
。 (感谢 sagi!)
一般 GROUP BY
提示:如果指定了 GROUP BY
子句,SELECT 列表中的每个列引用必须标识一个分组列或作为参数一组函数。
此外,您可以从 dailysales
table 中删除 article
列。该数据已存储在 stock
table 中。永远不要存储相同的数据两次! (规范化!)如果保留该列,则存在数据不一致的风险。
你可以在一个单独的 table 中对项目求和,这样会比 GROUP BY
2 tables
更清楚
SELECT
s.item,
s.article,
ISNULL(ds.sold, 0) AS qtysold,
s.stockonhand
FROM
stock s OUTER APPLY
(SELECT SUM(sold) AS sold FROM dailysales WHERE item = s.item GROUP BY item) ds
我正在尝试加入 2 tables 以获得输出报告。涉及的 table 是股票和每日销售额 table。
股票和每日销售 tables:
所需的输出格式:
我正在尝试使用以下查询加入 2 tables
Select item,article,sold,stockonhand
from stock S
left join dailysales as D on S.item=D.item
group by item
我希望输出包括股票 table 中的所有行。比如有存货,但没有卖掉,也要列入报表。目前我的报告没有显示,(有货但未售出)。
希望您能理解我的上下文或指出我可以阅读的教程。我试着搜索了几天,但找不到适合我的确切问题。
未测试 -
select item,article,sum(sold),sum(stockonhand)-sum(sold) from (
select a.item,a.article,a.stockonhand,case when b.sold is null then 0 else b.sold end as sold
from stock a left join dailysales b on (a.item = b.item))
group by item,article;
它基本上是左连接并将 0 放在空列上(之后求和) 然后总结 select 中所有列的结果分组(你的查询出了什么问题)
简单地 LEFT JOIN
两个 table(也得到长笛),做一个 GROUP BY
,然后 SUM
卖出:
select s.item, s.article, coalesce(SUM(d.sold),0) as "qty sold", s.stockonhand
from stock S
left join dailysales as D on S.item=D.item
group by s.item, s.article, s.stockonhand
对于未售出的商品,coalesce
可将 NULL
替换为 0
。 (感谢 sagi!)
一般 GROUP BY
提示:如果指定了 GROUP BY
子句,SELECT 列表中的每个列引用必须标识一个分组列或作为参数一组函数。
此外,您可以从 dailysales
table 中删除 article
列。该数据已存储在 stock
table 中。永远不要存储相同的数据两次! (规范化!)如果保留该列,则存在数据不一致的风险。
你可以在一个单独的 table 中对项目求和,这样会比 GROUP BY
2 tables
SELECT
s.item,
s.article,
ISNULL(ds.sold, 0) AS qtysold,
s.stockonhand
FROM
stock s OUTER APPLY
(SELECT SUM(sold) AS sold FROM dailysales WHERE item = s.item GROUP BY item) ds