chintan.floydian (4/18/2013)
Thanks very much guys...Unfortunately I'm still on 2008I've tried the below and it works, but I'm not sure how to achieve this through the quirky update as advised in the article
;with Data(ClassID, MemberID, Weight) as
(
select 'A', 1, 10 union all
select 'A', 2, 20 union all
select 'A', 3, 40 union all
select 'A', 5, 25 union all
select 'A', 6, 15 union all
select 'A', 8, 10 union all
select 'B', 1, 50 union all
select 'B', 2, 10 union all
select 'B', 3, 60 union all
select 'B', 6, 400
)
--SELECT* FROM Data ORDER BY ClassID,Weight
SELECT d.classid,d.memberid,d.Weight
FROM Data d
INNER JOIN (
SELECT D2.ClassID,SUM(Weight) as total_weight
FROM Data D2
GROUP BY D2.ClassID
) Totals ON Totals.ClassID = d.ClassID
WHERE
(SELECT SUM(weight) FROM Data D3 where D3.ClassID = d.ClassID and D3.weight <= d.weight)
<= 0.25*Totals.total_weight
Help is much appreciated
There are a few things you would have to do differently here for the quirky update to work. You would need to move this to a table instead of a cte. You need to have a clustered index as described in the article. The idea here is that you could use the quirky update to get your running total and then select rows where the total column is less than max of that column * 25.
_______________________________________________________________
Need help? Help us help you.
Read the article at http://www.sqlservercentral.com/articles/Best+Practices/61537/ for best practices on asking questions.
Need to split a string? Try Jeff Modens splitter http://www.sqlservercentral.com/articles/Tally+Table/72993/.
Cross Tabs and Pivots, Part 1 – Converting Rows to Columns - http://www.sqlservercentral.com/articles/T-SQL/63681/
Cross Tabs and Pivots, Part 2 - Dynamic Cross Tabs - http://www.sqlservercentral.com/articles/Crosstab/65048/
Understanding and Using APPLY (Part 1) - http://www.sqlservercentral.com/articles/APPLY/69953/
Understanding and Using APPLY (Part 2) - http://www.sqlservercentral.com/articles/APPLY/69954/