【问题标题】:MSSQL Sum total on dates from table 1 and table 2表 1 和表 2 中日期的 MSSQL 总和
【发布时间】:2012-05-23 09:23:35
【问题描述】:

我有以下问题:

我有两张桌子,一张用于客户购买的商品,另一张用于员工销售:

Table 1 (Emp)
EmpId 
ProductId
dateSold
Price
Qty

Table 2 (Cust)
CustomerId
ProductId
dateSold
Price
Qty

这是我现在正在查询的查询:

SELECT  SUM(EmployeeSales.productPrice * EmployeeSales.Qty + 
            userBoughtItems.ProductPrice * userBoughtItems.qty) AS Total, 
        EmployeeSales.dateSold, 
        userBoughtItems.dateSold AS Expr1
FROM    EmployeeSales 
INNER JOIN userBoughtItems ON EmployeeSales.dateSold = userBoughtItems.dateSold
GROUP BY EmployeeSales.dateSold, userBoughtItems.dateSold

我想得到两个表在同一日期的总数...

【问题讨论】:

    标签: sql-server sum subquery


    【解决方案1】:

    join 为左表中的每个匹配行重复右表。在您的示例中,我希望这会导致大量重复的行。考虑改用union

    select  cast(dt as date)
    ,       sum(sales)
    from    (
            select  dateSold as dt
            ,       productPrice * Qty as sales
            from    EmployeeSales
            union all
            select  dateSold
            ,       ProductPrice * qty
            from    userBoughtItems
            ) as SubQueryAlias
    group by
            cast(dt as date)
    

    子查询包含所有销售额的列表,外部查询每天汇总它们。

    如果您使用的是 SQL Sever 2005 或更早版本,请将 cast(dt as date) 替换为 dateadd(dd, 0, datediff(dd, 0, dt))

    【讨论】:

    • Msg 8120,Level 16,State 1,Line 2 列 'dbo.EmployeeSales.dateSold' 在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。 Sum(sales) 应该是 Sum(SubQueryAlias) 是吗?
    • 好吧,我知道你现在的总和是什么意思,但是 dt 呢?
    • 内部查询不应该有 sum 聚合,因为分组发生在外部查询中。我已经编辑了答案。 “SubQueryAlias”只是内部查询的名称。该名称未使用,但 SQL 语法要求。
    • 我认为的另一个问题,首先是查询有效,但是由于数据中有时间,所以问题它给出了正确的答案:2012-05-07 00:00: 00.000 15
    • 好的,答案现在修改为按日期分组
    【解决方案2】:

    如果没有 group by 子句,它无法工作,它会引发以下错误。

    消息 8120,级别 16,状态 1,第 4 行列“employeesales.dateSold”为 在选择列表中无效,因为它不包含在 聚合函数或 GROUP BY 子句。

    我略有改变,

    使用这个

    选择 dt , sum(sales) from ( 选择 dateSold 作为 dt , sum(Price * Qty) 作为销售额 从员工销售组按日期销售 联合所有 选择日期已售出 , sum(价格 * 数量) 来自 customerboughtitems group by dateSold ) 作为 SubQueryAlias 组 dt

    【讨论】:

    • 这个答案也有效,但我仍然需要仅与日期比较,因为在我的日期中我有日期时间(2012-05-22 20:16:14.267),我认为这会弄乱查询,我想只有 5 天,但出现了 640 个结果...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多