Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
dimoss
Yak Posting Veteran
52 Posts |
Posted - 2008-11-07 : 07:57:06
|
| Hi,I have a table with two columns 'id', 'tickets'.I want to make a draw and select randomly id's where the total of the tickets is a given numberFor example...id tickets-----------1 32 53 14 25 16 27 58 19 410 2----------I would like to select randomly 5 id's where the total of the tickets would be 10.Is it possible?Thanks in advanceDeniswww.tabletennis.gr |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2008-11-07 : 08:12:45
|
Or this simpler but slower on a large tableDECLARE @Sample TABLE ( ID TINYINT NOT NULL, Tickets TINYINT NOT NULL )INSERT @SampleSELECT 1, 3 UNION ALLSELECT 2, 5 UNION ALLSELECT 3, 1 UNION ALLSELECT 4, 2 UNION ALLSELECT 5, 1 UNION ALLSELECT 6, 2 UNION ALLSELECT 7, 5 UNION ALLSELECT 8, 1 UNION ALLSELECT 9, 4 UNION ALLSELECT 10, 2;WITH yak (ID, Tickets)AS ( SELECT ID, Tickets FROM @Sample WHERE Tickets <= 10 UNION ALL SELECT -1, 0)SELECT TOP 1 NULLIF(y0.ID, -1) AS id1, NULLIF(y1.ID, -1) AS id2, NULLIF(y2.ID, -1) AS id3, NULLIF(y3.ID, -1) AS id4, NULLIF(y4.ID, -1) AS id5, y0.Tickets, y1.Tickets, y2.Tickets, y3.Tickets, y4.TicketsFROM yak AS y0INNER JOIN yak AS y1 ON y1.ID < y0.IDINNER JOIN yak AS y2 ON y2.ID < y1.IDINNER JOIN yak AS y3 ON y3.ID < y2.IDINNER JOIN yak AS y4 ON y4.ID < y3.IDWHERE y0.Tickets + y1.Tickets + y2.Tickets + y3.Tickets + y4.Tickets = 10ORDER BY NEWID() E 12°55'05.63"N 56°04'39.26" |
 |
|
|
dimoss
Yak Posting Veteran
52 Posts |
Posted - 2008-11-07 : 12:16:30
|
quote: Originally posted by Peso Or this simpler but slower on a large tableDECLARE @Sample TABLE ( ID TINYINT NOT NULL, Tickets TINYINT NOT NULL )INSERT @SampleSELECT 1, 3 UNION ALLSELECT 2, 5 UNION ALLSELECT 3, 1 UNION ALLSELECT 4, 2 UNION ALLSELECT 5, 1 UNION ALLSELECT 6, 2 UNION ALLSELECT 7, 5 UNION ALLSELECT 8, 1 UNION ALLSELECT 9, 4 UNION ALLSELECT 10, 2;WITH yak (ID, Tickets)AS ( SELECT ID, Tickets FROM @Sample WHERE Tickets <= 10 UNION ALL SELECT -1, 0)SELECT TOP 1 NULLIF(y0.ID, -1) AS id1, NULLIF(y1.ID, -1) AS id2, NULLIF(y2.ID, -1) AS id3, NULLIF(y3.ID, -1) AS id4, NULLIF(y4.ID, -1) AS id5, y0.Tickets, y1.Tickets, y2.Tickets, y3.Tickets, y4.TicketsFROM yak AS y0INNER JOIN yak AS y1 ON y1.ID < y0.IDINNER JOIN yak AS y2 ON y2.ID < y1.IDINNER JOIN yak AS y3 ON y3.ID < y2.IDINNER JOIN yak AS y4 ON y4.ID < y3.IDWHERE y0.Tickets + y1.Tickets + y2.Tickets + y3.Tickets + y4.Tickets = 10ORDER BY NEWID() E 12°55'05.63"N 56°04'39.26"
Thank you Peso.What if I don't have a specific number of id's but only a given number of tickets.In my example what would be the code for the random draw for a total of 10 tickets?P.S. I want this code to work on a large table...Thank you again.www.tabletennis.gr |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
|
|
dimoss
Yak Posting Veteran
52 Posts |
Posted - 2008-11-07 : 13:19:27
|
quote: Originally posted by Peso If you want a generic solution, why don't you provide that information from the beginning?Do you think it is fun to have us work twice as hard, for free?You want a solution that should work for any number of tickets?See http://weblogs.sqlteam.com/peterl/archive/2008/08/12/How-to-sum-up-an-unknown-number-of-records.aspx E 12°55'05.63"N 56°04'39.26"
Sorry Peso..:-(I didn't want to make fun.I just tried to give an example to make it clear.Sorry again and thanks for the reply.www.tabletennis.gr |
 |
|
|
|
|
|
|
|