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 |
|
rpc86
Posting Yak Master
200 Posts |
Posted - 2009-10-14 : 23:26:32
|
Hi guys,This is something hard for me and has been stuck me for 1 week.The SubjectAlert is the main table here. The QueueRegister gets data from ObjectRetrievalGroup (ORG) table. Look at the QueueRegister (QR), some data has 1 digit, 2 digits and 3 digits. Say QR is 9. This belongs to ORG ObjectRetrievalGroupBitValue column. QueueRegister 512 means, the Queue fell in ObjectRetrievalGroupBitValue 5,1 and 2.My question is how to get the QueueRegister in a separatable digits.I need a result just like below:SubjectAlertKey ObjectRetrievalGroupId102 QUEUE PRIORITY > 2170 QUEUE PRIORITY > 2171 OVERDUEREMINDER171 VIP112 LOCAL112 USERDUEREMINDER122 VIP122 USERDUEREMINDER122 OVERDUEREMINDER132 VIP132 USERDUEREMINDER132 OVERDUEREMINDER SubjectAlert TableSubjectAlertKey QueueRegister--------------- --------------------102 9170 9171 25112 41122 512132 512 ObjectRetrievalGroup Table ObjectRetrievalGroupId ObjectRetrievalGroupBitValue---------------------- ----------------------------ODAANYBYPRIORITY 0USERDUEREMINDER 1OVERDUEREMINDER 2QIDPRIORITYGTE4 3LOCAL 4VIP 5NORMAL VISA 6NORMAL MASTERCARD 7FOREIGN 8QUEUE PRIORITY > 2 9VISA CARD 10 Please help me.Thank you very very much. |
|
|
weipublic
Starting Member
19 Posts |
Posted - 2009-10-15 : 21:47:32
|
| [code]WITH CTET (SubjectAlertKey, QueueRegister) AS( SELECT SubjectAlertKey,LEFT(QueueRegister,1) FROM SubjectAlert UNION ALL SELECT SubjectAlertKey,SUBSTRING(QueueRegister,2,1) FROM SubjectAlert WHERE LEN(QueueRegister)>1 UNION ALL SELECT SubjectAlertKey,SUBSTRING(QueueRegister,3,1) FROM SubjectAlert WHERE LEN(QueueRegister)>2)SELECT c.SubjectAlertKey, o.ODAANYBYPRIORITY FROM CTET cINNER JOIN ObjectRetrievalGroup o ON o.ObjectRetrievalGroupBitValue = c.QueueRegisterORDER BY SubjectAlertKey[/code] |
 |
|
|
khtan
In (Som, Ni, Yak)
17689 Posts |
Posted - 2009-10-15 : 23:39:13
|
[code]DECLARE @SubjectAlert TABLE( SubjectAlertKey int, QueueRegister varchar(3))INSERT INTO @SubjectAlertSELECT 102, '9' UNION ALLSELECT 170, '9' UNION ALLSELECT 171, '25' UNION ALLSELECT 112, '41' UNION ALLSELECT 122, '512' UNION ALLSELECT 132, '512'DECLARE @ObjectRetrievalGroup TABLE ( ObjectRetrievalGroupId varchar(20), ObjectRetrievalGroupBitValue CHAR(1))INSERT INTO @ObjectRetrievalGroupSELECT 'ODAANYBYPRIORITY', '0' UNION ALLSELECT 'USERDUEREMINDER', '1' UNION ALLSELECT 'OVERDUEREMINDER', '2' UNION ALLSELECT 'QIDPRIORITYGTE4', '3' UNION ALLSELECT 'LOCAL', '4' UNION ALLSELECT 'VIP', '5' UNION ALLSELECT 'NORMAL VISA', '6' UNION ALLSELECT 'NORMAL MASTERCARD', '7' UNION ALLSELECT 'FOREIGN', '8' UNION ALLSELECT 'QUEUE PRIORITY > 2', '9'SELECT sak.SubjectAlertKey, org.ObjectRetrievalGroupIdFROM @SubjectAlert sak CROSS JOIN ( SELECT n = 1 UNION ALL SELECT n = 2 UNION ALL SELECT n = 3 ) n INNER JOIN @ObjectRetrievalGroup org ON SUBSTRING(sak.QueueRegister, n, 1) = org.ObjectRetrievalGroupBitValueWHERE SUBSTRING(sak.QueueRegister, n, 1) <> ''ORDER BY sak.SubjectAlertKey/*SubjectAlertKey ObjectRetrievalGroupId --------------- ---------------------- 102 QUEUE PRIORITY > 2112 LOCAL112 USERDUEREMINDER122 VIP122 USERDUEREMINDER122 OVERDUEREMINDER132 VIP132 USERDUEREMINDER132 OVERDUEREMINDER170 QUEUE PRIORITY > 2171 OVERDUEREMINDER171 VIP(12 row(s) affected)*/[/code] KH[spoiler]Time is always against us[/spoiler] |
 |
|
|
rpc86
Posting Yak Master
200 Posts |
Posted - 2009-10-16 : 00:53:08
|
| That works fine. Thank you for both replies. I appreciate you all. |
 |
|
|
rpc86
Posting Yak Master
200 Posts |
Posted - 2009-10-16 : 02:22:04
|
| I tried your suggestions and they work fine in SQL 2005. But when I tried in SQL 2000, there is a syntax error in WITH. |
 |
|
|
khtan
In (Som, Ni, Yak)
17689 Posts |
Posted - 2009-10-16 : 02:51:58
|
CTE is not available for SQL 2000. Only 2005 / 2008. You can change that query into derived table KH[spoiler]Time is always against us[/spoiler] |
 |
|
|
|
|
|
|
|