【问题标题】:Select From Multiple tables with group by in SQL在 SQL 中使用 group by 从多个表中选择
【发布时间】:2019-10-18 16:23:55
【问题描述】:

我有两种观点: 购买_详情视图:

InvoiceId
ItemId
Quantity
Price
ExpireDate
ItemCode
StoreId

和 Sale_Details 视图

InvoiceId
ItemId
Quantity
Price
ItemCode
StoreId

和项目表:

ID
Name
SalePrice
PurchasePrice

Purchase_Detail 查看数据

Id  StoreId ItemCode        Price            Quantity         ItemId       ExpireDate
51    1      345            300.00           1.00                5          2019-10-25
52    1      348            300.00           22.00               5          2019-10-04
53    2      348            300.00           17.00               5          2019-11-11
54    1      345            300.00           8.00                5          2019-12-12

Sale_Details 查看数据

Id  StoreId    ItemCode          Price         Quantity         ItemId
55       1       345            300.00          4.00              5
56       1       348            300.00          3.00              5

我想找到按 ItemId 和 ItemCode 分组的每个项目的数量总和。

第二:把sales和purchase放在同一张表还是分开比较好(就像我做的那样?

【问题讨论】:

  • 您的样本不清楚...不存在列 itemID ..

标签: sql sql-server join group-by


【解决方案1】:

我认为您需要先将数据合并在一起,然后再分组,这样您的总和就可以跨越集合。您可以使用 CTE 执行此操作。像这样的:

WITH CTE_Detail AS (
    SELECT ItemId, ItemCode, Quantity FROM Purchase_Details
    UNION ALL
    SELECT ItemId, ItemCode, Quantity FROM Sale_Details 
)

SELECT ItemId, ItemCode, SUM(Quantity) AS Quantity 
FROM CTE_Detail
GROUP BY ItemId, ItemCode

至于你关于“什么更好”的问题,这取决于你想如何使用它。显然,通过将它们分开,此查询会增加一点复杂性,但它可能会在其他方面对您有所帮助。我相信你说它们是视图,所以你不能同时拥有它吗?

【讨论】:

    【解决方案2】:

    应该这样做

    with purchases as (
        select
            ItemId,
            ItemCode,
            sum(quantity) as purchase_sum
        from
            Purchase_Detail
        group by
            1,
            2
    ),
    sales as (
        select
            ItemId,
            ItemCode,
            sum(quantity) as sales_sum
        from
            Sales_Details
        group by
            1,
            2
    )
    select
        ItemId,
        ItemCode,
        (
            purchase_sum - sales_sum
        ) as net
    from
        purchases
    join sales
            using (
            ItemId,
            ItemCode
        )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-15
      • 2015-11-11
      • 1970-01-01
      • 2017-05-16
      • 2022-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多