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.

 All Forums
 SQL Server 2005 Forums
 Transact-SQL (2005)
 How to limit multiple records

Author  Topic 

CoachBarker
Posting Yak Master

170 Posts

Posted - 2009-01-21 : 16:15:03
A dataset that I am returning can have up to 11 records that come under detail_record.ticket_number, but I only need to return it one time in a report. I tried using DISTINCT in front of detail_record.ticket_number thinking that would limit the returned dataset to one record. Here is the SQL Statement I am using.

SELECT detail_record.detail_number, detail_record.ticket_number, detail_record.division, CAST(detail_record.pickup_dt AS datetime) AS PickupDate,
CAST(detail_record.deliver_dt AS datetime) AS DeliverDate, detail_record.customer_delv_to, detail_record.customer_bill_to,
cmBillTo.customer_number AS bill_to_number, cmBillTo.customer_name AS bill_to_name, cmBillTo.city AS bill_to_city,
cmDelvTo.customer_number AS deliver_to_number, cmDelvTo.customer_name AS deliver_to_name, cmDelvTo.city AS deliver_to_city,
detail_record.pickup_date, detail_record.grand_total_wt, hauler_master.hauler_number, hauler_master.hauler_name, hauler_master.city,
detail_record.ddp_weight
FROM detail_record INNER JOIN
customer_master AS cmBillTo ON detail_record.customer_bill_to = cmBillTo.customer_number INNER JOIN
customer_master AS cmDelvTo ON detail_record.customer_delv_to = cmDelvTo.customer_number INNER JOIN
hauler_master ON detail_record.hauler_number = hauler_master.hauler_number
WHERE (detail_record.customer_bill_to = @customer_number) AND (detail_record.pickup_date BETWEEN @StartDate AND @EndDate)
ORDER BY detail_record.ticket_number

Thanks for the help
CoachBarker

revdnrdy
Posting Yak Master

220 Posts

Posted - 2009-01-21 : 16:17:57
Hello;

Not exactly sure of the record you want but you can use TOP to return a certain number of records..

Something like this would return the top record in a database table. that matched a ticket_number in the detail_record table.

SELECT TOP 1 * FROM detail_record
WHERE ticket_number=SomeID
Go to Top of Page

CoachBarker
Posting Yak Master

170 Posts

Posted - 2009-01-21 : 17:37:46
But will that apply in a situation like this, selecting TOP would return only the highest ticket_number wouldn't it?

detail_records.ticket_number = 123456 and there are 6 records with that number. This is a case where detail_record can have up to 11 ticket_numbers that are the same. And I have to return all ticket numbers between StartDate and EndDate which can include many ticke_numbers, I just want to return 1 of repeating ticket_numbers.

Thanks for the help
CoachBarker
Go to Top of Page

SwePeso
Patron Saint of Lost Yaks

30421 Posts

Posted - 2009-01-21 : 17:39:46
See examples how to use ROW_NUMBER() function.



E 12°55'05.63"
N 56°04'39.26"
Go to Top of Page

CoachBarker
Posting Yak Master

170 Posts

Posted - 2009-01-21 : 18:25:10
Thanks I will look into it.

Thanks for the help
CoachBarker
Go to Top of Page

CoachBarker
Posting Yak Master

170 Posts

Posted - 2009-01-22 : 06:30:57
I haven't figured it out yet, all I want to do is return all the records for a selected month, but if there is multiple rows with the same ticket_number only return one of them(ticket_number)

Thanks for the help
CoachBarker
Go to Top of Page

SwePeso
Patron Saint of Lost Yaks

30421 Posts

Posted - 2009-01-22 : 06:46:47
Which one?



E 12°55'05.63"
N 56°04'39.26"
Go to Top of Page

SwePeso
Patron Saint of Lost Yaks

30421 Posts

Posted - 2009-01-22 : 06:48:31
Change the ORDER BY within ROW_NUMBER() windowed function to change which record you want to fetch
SELECT		detail_number,
ticket_number,
division,
PickupDate,
DeliverDate,
customer_delv_to,
customer_bill_to,
bill_to_number,
bill_to_name,
bill_to_city,
deliver_to_number,
deliver_to_name,
deliver_to_city,
pickup_date,
grand_total_wt,
hauler_number,
hauler_name,
city,
ddp_weight
FROM (
SELECT detail_record.detail_number,
detail_record.ticket_number,
detail_record.division,
CAST(detail_record.pickup_dt AS datetime) AS PickupDate,
CAST(detail_record.deliver_dt AS datetime) AS DeliverDate,
detail_record.customer_delv_to,
detail_record.customer_bill_to,
cmBillTo.customer_number AS bill_to_number,
cmBillTo.customer_name AS bill_to_name,
cmBillTo.city AS bill_to_city,
cmDelvTo.customer_number AS deliver_to_number,
cmDelvTo.customer_name AS deliver_to_name,
cmDelvTo.city AS deliver_to_city,
detail_record.pickup_date,
detail_record.grand_total_wt,
hauler_master.hauler_number,
hauler_master.hauler_name,
hauler_master.city,
detail_record.ddp_weight,
ROW_NUMBER() OVER (PARTITION BY detail_record.ticket_number ORDER BY detail_record.detail_number DESC) AS recID
FROM detail_record
INNER JOIN customer_master AS cmBillTo ON detail_record.customer_bill_to = cmBillTo.customer_number
INNER JOIN customer_master AS cmDelvTo ON detail_record.customer_delv_to = cmDelvTo.customer_number
INNER JOIN hauler_master ON detail_record.hauler_number = hauler_master.hauler_number
WHERE detail_record.customer_bill_to = @customer_number
AND detail_record.pickup_date BETWEEN @StartDate AND @EndDate
) AS d
WHERE recID = 1
ORDER BY ticket_number



E 12°55'05.63"
N 56°04'39.26"
Go to Top of Page

CoachBarker
Posting Yak Master

170 Posts

Posted - 2009-01-22 : 12:36:56
Thank you that did exactly what was required.

Thanks for the help
CoachBarker
Go to Top of Page
   

- Advertisement -