פוסט של משה טייכר בשם שליפת מילים מתוך טקסט בTSQL שהתפרסם לאחרונה עודד אותי לפרסם תגובה עקיפה בפוסט הסרת תווים מיותרים בו הצעתי דרך טובה יותר (לטעמי) לבצע מטלה מקדימה שלו, ואילו הפוסט הזה הוא בעקבות פטנט יפה שלמדתי ממנו – ביצוע Split בעזרת XML, ואשר סייע לי לפתור באופן אלגנטי בעייה שנתקלתי בה בעבר. נתחיל מבעייה פשוטה יותר שטיפלתי בה בעקיפין מספר פעמים בעבר (אופציית Multi-Value ב-Reporting Services, יחס של רבים לרבים ללא טבלת עזר) ואציג אותה כאן בצורה מסודרת: נניח שיש לנו טבלת מכירות של מוכרים (מי מכר מה וכמה) וטבלת עמלות שמגדירה לכל מוכר עבור אילו פריטים יקבל עמלה:
If Object_Id('tempdb..#T_Mehirot','U') Is Not Null Drop Table #T_Mehirot;
GoCreate Table #T_Mehirot(ID Int Identity,
Moher Varchar(10),
Prit Varchar(10),
Camut Int);
Go
Insert
Into #T_Mehirot
Select 'Hila','Milk',10 Union All
Select 'Hila','Bread',5 Union All
Select 'Hila','Butter',2 Union All
Select 'Hila','Butter',1 Union All
Select 'Gal','Milk',6 Union All
Select 'Gal','Milk',1 Union All
Select 'Gal','Bread',3 Union All
Select 'Gal','Butter',2;
Go
Select *
From #T_Mehirot;
GoIf Object_Id('tempdb..#T_Amalot','U') Is Not Null Drop Table #T_Amalot;
Go
Read more: גרי רשף
QR:
GoCreate Table #T_Mehirot(ID Int Identity,
Moher Varchar(10),
Prit Varchar(10),
Camut Int);
Go
Insert
Into #T_Mehirot
Select 'Hila','Milk',10 Union All
Select 'Hila','Bread',5 Union All
Select 'Hila','Butter',2 Union All
Select 'Hila','Butter',1 Union All
Select 'Gal','Milk',6 Union All
Select 'Gal','Milk',1 Union All
Select 'Gal','Bread',3 Union All
Select 'Gal','Butter',2;
Go
Select *
From #T_Mehirot;
GoIf Object_Id('tempdb..#T_Amalot','U') Is Not Null Drop Table #T_Amalot;
Go
Read more: גרי רשף
QR: