【问题标题】:Select Sold and unsold product from same table in SQL Server for last month从上个月 SQL Server 的同一张表中选择已售出和未售出的产品
【发布时间】:2020-03-03 23:24:35
【问题描述】:

我有数据库表并尝试编写查询以从一张表中查找已售和未售出的产品列表。

桌子在下面

期待结果

我如何得到这个结果?我正在使用 CTE 创建 Tamp 表并提供所有服务,然后进行左连接,但它只给了我 2 月销售的产品,但我也想要所有没有销售的产品。

【问题讨论】:

  • 不使用图片的原因是here。如果您向我们展示您编写的查询,我们会更容易为您提供帮助。以及表的 DDL。

标签: sql sql-server tsql date


【解决方案1】:

您可以交叉连接产品和日期,然后带上带有left join 的表:

select 
    p.product,
    t.quantity_sold,
    d.yr,
    d.mn
from (select distinct product from mytable) p
cross join (select distinct yr, mn from mytable) d
left join mytable t
    on  t.product = p.product
    and t.yr = d.yr
    and t.mn = d.mn

这会将nulls 用于没有销售的行 - 这可能是一个数字列,因此您通常不希望将'Not Sold' 之类的字符串写入其中。

如果有可能重复(product, yr, mn),您可能需要使用外部聚合:

select 
    p.product,
    sum(t.quantity_sold) quantity_sold,
    d.yr,
    d.mn
from (select distinct product from mytable) p
cross join (select distinct yr, mn from mytable) d
left join mytable t
    on  t.product = p.product
    and t.yr = d.yr
    and t.mn = d.mn
group by p.product, d.yr, d.mn

【讨论】:

  • 非常感谢它帮了我很大的忙并解决了我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多