add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
select @@version;
(No column name)
Microsoft SQL Server 2019 (RTM-CU6) (KB4563110) - 15.0.4053.23 (X64)
Jul 25 2020 11:26:55
Copyright (C) 2019 Microsoft Corporation
Express Edition (64-bit) on Windows Server 2019 Standard 10.0 <X64> (Build 17763: ) (Hypervisor)
CREATE TABLE Table5 (
product varchar(20)
, weeknumber int
, sales int
);
INSERT INTO Table5 VALUES
('a', 3, 63)
, ('a', 4, 62)
, ('a', 5, 59)
, ('a', 1, 58)
, ('b', 4, 44)
, ('b', 5, 52)
, ('b', 1, 59)
, ('c', 5, 77)
, ('c', 1, 21)
;
9 rows affected
-- Original SQL with the error:

select *, max(sales)
from
(
select product, '1-4' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (1,2,3,4)
group by product
union
select product, '2-5' as weeks, sum(sales)as sales from Table5 t
where t.WEEKNUMBER IN (2,3,4,5)
group by product
union
select product, '3-6' as weeks, sum(sales)as sales from Table5 t
where t.WEEKNUMBER IN (3,4,5,6)
group by product
union
select product, '4-7' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (4,5,6,7)
group by product
union
select product, '5-8' as weeks, sum(sales)as sales from Table5 t
where t.WEEKNUMBER IN (5,6,7,8)
group by product
)a
group by product
order by product, sales desc
Msg 8120 Level 16 State 1 Line 3
Column 'a.weeks' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
select TOP 1 *
from (
select product, '1-4' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (1,2,3,4)
group by product
union
select product, '2-5' as weeks, sum(sales)as sales from Table5 t
where t.WEEKNUMBER IN (2,3,4,5)
group by product
union
select product, '3-6' as weeks, sum(sales)as sales from Table5 t
where t.WEEKNUMBER IN (3,4,5,6)
group by product
union
select product, '4-7' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (4,5,6,7)
group by product
union
select product, '5-8' as weeks, sum(sales)as sales from Table5 t
where t.WEEKNUMBER IN (5,6,7,8)
group by product
) a
order by sales desc
product weeks sales
a 2-5 184
WITH xrows AS (
select a.*
, row_number() OVER (ORDER BY sales DESC) AS n
from (
select product, '1-4' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (1,2,3,4)
group by product
union
select product, '2-5' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (2,3,4,5)
group by product
union
select product, '3-6' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (3,4,5,6)
group by product
union
select product, '4-7' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (4,5,6,7)
group by product
union
select product, '5-8' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (5,6,7,8)
group by product
) a
)
SELECT *
FROM xrows
WHERE n = 1
;

product weeks sales n
a 2-5 184 1
-- Find the highest sales product per week:

WITH xrows AS (
select a.*
, row_number() OVER (PARTITION BY weeks ORDER BY sales DESC) AS n
from (
select product, '1-4' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (1,2,3,4)
group by product
union
select product, '2-5' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (2,3,4,5)
group by product
union
select product, '3-6' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (3,4,5,6)
group by product
union
select product, '4-7' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (4,5,6,7)
group by product
union
select product, '5-8' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (5,6,7,8)
group by product
) a
)
SELECT *
FROM xrows
WHERE n = 1
ORDER BY weeks
;

product weeks sales n
a 1-4 183 1
a 2-5 184 1
a 3-6 184 1
a 4-7 121 1
c 5-8 77 1
-- Find the highest sales week per product:

WITH xrows AS (
select a.*
, row_number() OVER (PARTITION BY product ORDER BY sales DESC) AS n
from (
select product, '1-4' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (1,2,3,4)
group by product
union
select product, '2-5' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (2,3,4,5)
group by product
union
select product, '3-6' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (3,4,5,6)
group by product
union
select product, '4-7' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (4,5,6,7)
group by product
union
select product, '5-8' as weeks, sum(sales) as sales from Table5 t
where t.WEEKNUMBER IN (5,6,7,8)
group by product
) a
)
SELECT *
FROM xrows
WHERE n = 1
ORDER BY product
;

product weeks sales n
a 2-5 184 1
b 1-4 103 1
c 2-5 77 1