| Author |
Topic |
|
lols
Posting Yak Master
174 Posts |
Posted - 2007-11-19 : 06:27:38
|
Hi,I have 3 tables. The tables are populated in the following order: One row for CallDetail, One for Call and one for Request and so onI have to generate a UniqueNo - Per empid, Per StateNo, Per CityNo, Per CallType (same for the same CallDetailID) and ordered by the date createdDECLARE @Request TABLE(RequestID INT, CustomerName VARCHAR(30), StateNo NVARCHAR(5), CityNo INT, CallID INT, UniqueNo INT)SELECT '324234', 'Jack', 'SA023', 12, 111, Null UNION ALLSELECT '223452', 'Tom', 'SA023', 12, 112, Null UNION ALLSELECT '456456', 'Bobby', 'SA023', 12, 114, Null UNION ALLSELECT '22322362', 'Guck', 'SA023', 12, 123, Null UNION ALLSELECT '22654392', 'Luck', 'SA023', 12, 134, Null UNION ALLSELECT '225652', 'Jim', 'SA023', 67, 143, Null UNION ALLSELECT '126756', 'Jasm', 'SA023', 67, 145, Null UNION ALLSELECT '786234', 'Chuck', 'SA023', 67, 154, Null UNION ALLSELECT '66234', 'Mutuk', 'SA023', 67, 185, Null UNION ALLSELECT '2232362', 'Buck', 'SA023', 67, 195, Null DECLARE @Call TABLE(CallID INT, CallType INT, CallDetailID INT)INSERT @CallSELECT 111, 1, 12123 UNION ALLSELECT 112, 1, 12123 UNION ALLSELECT 114, 2, 12123 UNION ALLSELECT 123, 2, 12123 UNION ALLSELECT 134, 3, 12123 UNION ALLSELECT 143, 1, 6532 UNION ALLSELECT 145, 1, 6532 UNION ALLSELECT 154, 2, 6532 UNION ALLSELECT 185, 2, 6532 UNION ALLSELECT 195, 3, 6532 DECLARE @CallDetail TABLE(CallDetailID INT, EmpID INT, EntryDt DateTime)INSERT @CallDetailSELECT 12123, 1, '11/5/2007 10:41:34 AM' UNION ALLSELECT 6532, 1, '11/5/2007 12:12:34 PM'---- QUERY WRITTENUPDATE r SET r.UniqueNo = dt.CallGroup FROM @Request r JOIN @Call c ON r.CallID = c.CallID JOIN (SELECT CallDetailID, EntryDt, CallGroup = ROW_NUMBER() OVER (ORDER BY EntryDt ) FROM @CallDetail ) dt ON c.CallDetailID = dt.CallDetailIDselect * from @Request OUTPUT :324234 Jack SA023 12 111 1223452 Tom SA023 12 112 1456456 Bobby SA024 12 114 122322362 Guck SA024 44 123 122654392 Luck SA023 12 134 1225652 Jim SA055 67 143 2126756 Jasm SA055 67 145 2786234 Chuck SA055 67 154 266234 Mutuk SA059 67 185 22232362 Buck SA055 67 195 2I made the city from 67 to 68 and 72 for Chuck and MutukSELECT '786234', 'Chuck', 'SA055', 68, 154, Null UNION ALLEXPECTED :324234 Jack SA023 12 111 1223452 Tom SA023 12 112 1456456 Bobby SA024 12 114 122322362 Guck SA024 44 123 122654392 Luck SA023 12 134 1225652 Jim SA055 67 143 2126756 Jasm SA055 67 145 2786234 Chuck SA055 68 154 166234 Mutuk SA059 72 185 12232362 Buck SA055 67 195 2So the unique no generated for it needs to be 1 and not 2. That is because we are looking out for a unique no. which remains the same for the same calldetailid, however changes for the following condition :Per empid, Per StateNo, Per CityNo, Per CallType (same for the same CallDetailID) and ordered by the date created"Similarly for different state or empid or calltypeSomething like this :PARTITION BY EmpID, r.StateNo, r.CityNo, c.CallType ORDER BY cd.EntryDtAny clues? |
|
|
alzdba
Starting Member
10 Posts |
Posted - 2007-11-19 : 08:36:43
|
Can you explain why you'd expect the result EXPECTED using your ranking function to get a UniqueNo ?USE adventureworks;SELECT Row_Number() OVER (ORDER BY A.City) as RowNum, Rank() OVER (ORDER BY A.City) as Rank, Dense_Rank() OVER (ORDER BY A.City) as DenseRank, NTile(3) OVER (ORDER BY A.City) as NTile_3, NTile(4) OVER (ORDER BY A.City) as NTile_4, A.City, SP.StateProvinceCode FROM Person.Address as A INNER JOIN Person.StateProvince as SPON A.StateProvinceID = SP.StateProvinceID WHERE SP.CountryRegionCode = 'US' AND SP.StateProvinceCode = 'AZ' |
 |
|
|
lols
Posting Yak Master
174 Posts |
Posted - 2007-11-19 : 08:50:16
|
| I am sorry i dont understand you...how to modify my query to get the expected results? |
 |
|
|
Vinnie881
Master Smack Fu Yak Hacker
1231 Posts |
Posted - 2007-11-20 : 00:56:33
|
| I am not following you.Why is mutok a 1 if he has the sameEmpID, StateNo , CityNo , CallType as chuck? |
 |
|
|
lols
Posting Yak Master
174 Posts |
Posted - 2007-11-20 : 01:01:09
|
| Hi,I wrote I made the city from 67 to 68 and 72 for Chuck and MutukSo Mutuk has the same empid, stateno and calltype but not teh same cityno as now it has become 72.that is why it should be 1. |
 |
|
|
Vinnie881
Master Smack Fu Yak Hacker
1231 Posts |
Posted - 2007-11-20 : 01:09:33
|
Your expected results are not making sense to me.Here's the query on how to do the following,Break each EmpID, StateNo, CityNo, and Call type into groups, then number sequntially within each group ordering by the entry date from earliest to latest.If this isn't what you are looking for please explain more.DECLARE @Request TABLE(RequestID INT, CustomerName VARCHAR(30), StateNo NVARCHAR(5), CityNo INT, CallID INT, UniqueNo INT)Insert Into @Request(RequestID,Customername,StateNo, CityNo, CallID, UniqueNo)SELECT '324234', 'Jack', 'SA023', 12, 111, Null UNION ALLSELECT '223452', 'Tom', 'SA023', 12, 112, Null UNION ALLSELECT '456456', 'Bobby', 'SA023', 12, 114, Null UNION ALLSELECT '22322362', 'Guck', 'SA023', 12, 123, Null UNION ALLSELECT '22654392', 'Luck', 'SA023', 12, 134, Null UNION ALLSELECT '225652', 'Jim', 'SA055', 67, 143, Null UNION ALLSELECT '126756', 'Jasm', 'SA055', 67, 145, Null UNION ALLSELECT '786234', 'Chuck', 'SA055', 68, 154, Null UNION ALLSELECT '66234', 'Mutuk', 'SA055', 72, 185, Null UNION ALLSELECT '2232362', 'Buck', 'SA055', 67, 195, Null DECLARE @Call TABLE(CallID INT, CallType INT, CallDetailID INT)INSERT @CallSELECT 111, 1, 12123 UNION ALLSELECT 112, 1, 12123 UNION ALLSELECT 114, 2, 12123 UNION ALLSELECT 123, 2, 12123 UNION ALLSELECT 134, 3, 12123 UNION ALLSELECT 143, 1, 6532 UNION ALLSELECT 145, 1, 6532 UNION ALLSELECT 154, 2, 6532 UNION ALLSELECT 185, 2, 6532 UNION ALLSELECT 195, 3, 6532 DECLARE @CallDetail TABLE(CallDetailID INT, EmpID INT, EntryDt DateTime)INSERT @CallDetailSELECT 12123, 1, '11/5/2007 10:41:34 AM' UNION ALLSELECT 6532, 1, '11/5/2007 12:12:34 PM'--select *,Row_Number() over (Partition by c.EmpID,a.stateno,a.CityNo,b.CallType order by c.Entrydt) as CorrecteduniqueIDfrom @Request ainner Join @call bon a.CallID = b.callIDInner Join@CallDetail con c.CallDetailID = b.CallDetailID |
 |
|
|
|
|
|