根据多个列计算不同的值

时间:2015-02-16 08:17:42

标签: mysql sql

我是一个MySQL新手,非常感谢我的专家提示。 我有以下数据集:

date      UnitID CategoryID  Quantity
2015-01-01   4     s           4
2015-01-01   5     s           6
2015-01-01   4     u          10
2015-01-01   5     u          20
2015-01-02   4     s           3
2015-01-02   5     s           1
2015-01-02   4     u           2
2015-01-02   5     u          32
2015-01-02   4     s           5
2015-01-02   4     s           5

我想将DateUnitIDCategoryID组合成不同密钥的值加起来(希望我的术语正确)。 即最后两行不是唯一的,因为第6行已经具有相同的date + UnitID + Category,因此查询不会添加这些记录值(10)。

所需的输出是:

date        UnitID  CategoryID  Quantity
2015-01-01  4       s            4
2015-01-01  4       u           10
2015-01-01  5       s            6
2015-01-01  5       u           20
2015-01-02  4       s            3
2015-01-02  4       u            2
2015-01-02  5       s            1
2015-01-02  5       u           32

2 个答案:

答案 0 :(得分:-1)

    declare @bob as table (
date datetime
,UnitID   varchar(10)
,CategoryID  varchar(10)
,Quantity int
)

insert @bob values('2015-01-01','4','s', 4   )
insert @bob values('2015-01-01','5','s', 6   )
insert @bob values('2015-01-01','4','u',10   )
insert @bob values('2015-01-01','5','u',20   )
insert @bob values('2015-01-02','4','s', 3   )
insert @bob values('2015-01-02','5','s', 1   )
insert @bob values('2015-01-02','4','u', 2   )
insert @bob values('2015-01-02','5','u',32   )
insert @bob values('2015-01-02','4','s', 5   )
insert @bob values('2015-01-02','4','s', 5   )

;with cte
AS
(
select 
        * 
        ,row_number() OVER (PARTITION BY date, UnitID, CategoryID 
                            ORDER BY date DESC) AS intRow
from @bob 

--order by date, unitid, CategoryID
)
select 
        date
        ,UnitID
        ,CategoryID
    from 
         cte
where 
          intRow = 1

答案 1 :(得分:-1)

你的措辞是这个

2015-01-02  4       s            3

应该是

2015-01-02  4       s           13

如果是这种情况,则查询只是

SELECT Date, UnitID, CategoryID, SUM(quantity)
FROM tbl
GROUP BY Date, UnitID, CategoryID;

“我想求和值......”不同意  “因此查询将不添加这些记录值(10)。” 上面的代码将添加它们。如果你没有添加它们,那么解释你想要的行值。