Reputation: 853
Using code sample below, how can I get the result set from @ExpectedResult table?
What is required is to group by DFH_Link and Famille_Code to find the Discount value with the max Occurence value.
DECLARE @Data TABLE
(
DFH_Link VARCHAR(25),
Famille_Code VARCHAR(25),
Discount DECIMAL(8,3),
Occurence INT
)
INSERT INTO @Data (DFH_Link, Famille_Code, Discount, Occurence) VALUES('Link 1', 'Family 1', 10, 2)
INSERT INTO @Data (DFH_Link, Famille_Code, Discount, Occurence) VALUES('Link 1', 'Family 1', 15, 5)
INSERT INTO @Data (DFH_Link, Famille_Code, Discount, Occurence) VALUES('Link 1', 'Family 1', 25, 3)
INSERT INTO @Data (DFH_Link, Famille_Code, Discount, Occurence) VALUES('Link 1', 'Family 2', 12, 10)
INSERT INTO @Data (DFH_Link, Famille_Code, Discount, Occurence) VALUES('Link 1', 'Family 2', 45, 7)
INSERT INTO @Data (DFH_Link, Famille_Code, Discount, Occurence) VALUES('Link 1', 'Family 2', 60, 25)
INSERT INTO @Data (DFH_Link, Famille_Code, Discount, Occurence) VALUES('Link 2', 'Family 1', 10, 8)
INSERT INTO @Data (DFH_Link, Famille_Code, Discount, Occurence) VALUES('Link 2', 'Family 1', 18, 12)
INSERT INTO @Data (DFH_Link, Famille_Code, Discount, Occurence) VALUES('Link 2', 'Family 1', 25, 3)
INSERT INTO @Data (DFH_Link, Famille_Code, Discount, Occurence) VALUES('Link 2', 'Family 2', 12, 18)
INSERT INTO @Data (DFH_Link, Famille_Code, Discount, Occurence) VALUES('Link 2', 'Family 2', 45, 37)
INSERT INTO @Data (DFH_Link, Famille_Code, Discount, Occurence) VALUES('Link 2', 'Family 2', 60, 20)
DECLARE @ExpectedResult TABLE
(
DFH_Link VARCHAR(25),
Famille_Code VARCHAR(25),
Discount DECIMAL(8,3)
)
INSERT INTO @ExpectedResult (DFH_Link, Famille_Code, Discount) VALUES ('Link 1', 'Family 1', 15)
INSERT INTO @ExpectedResult (DFH_Link, Famille_Code, Discount) VALUES ('Link 1', 'Family 2', 60)
INSERT INTO @ExpectedResult (DFH_Link, Famille_Code, Discount) VALUES ('Link 2', 'Family 1', 18)
INSERT INTO @ExpectedResult (DFH_Link, Famille_Code, Discount) VALUES ('Link 2', 'Family 2', 45)
SELECT * FROM @Data
SELECT * FROM @ExpectedResult
Upvotes: 1
Views: 28
Reputation: 2300
You can just use a window function to group the data by Link and Famille and then just pull out the one with the highest occurance:
SELECT DFH_Link, Famille_Code, Discount
FROM (
SELECT DFH_Link, Famille_Code, Discount, Occurence, ROW_NUMBER() OVER(Partition by DFH_Link,Famille_Code ORDER BY Occurence desc) RN
from @Data) t1
WHERE RN = 1
Upvotes: 2