এখানে একটি অ্যাসেমব্লী ট্রি রয়েছে যা আমি পুনরাবৃত্ত T-SQL
অনুসন্ধান (সম্ভবতঃ) ব্যবহার করে অনুসন্ধান করতে চাইCTE
নীচে প্রত্যাশিত ফলাফলগুলির সাথে ) । আমি কোনও অংশ প্রদত্ত সমাবেশের মোট পরিমাণ জানতে চাই।
অর্থ যদি আমি 'রিভেট' অনুসন্ধান করি তবে আমি সরাসরি বাচ্চাদের গণনা নয়, সমাবেশের মধ্যে প্রতিটি স্তরে মোট গণনা জানতে চাই।
Assembly (id:1)
|
|-Rivet
|-Rivet
|-SubAssembly (id:2)
| |
| |-Rivet
| |-Bolt
| |-Bolt
| |-SubSubAssembly (id:3)
| |
| |-Rivet
| |-Rivet
|
|-SubAssembly (id:4)
|-Rivet
|-Bolt
DESIRED Results
-------
ID, Count
1 , 6
2 , 3
3 , 2
4 , 1
বর্তমানে, আমি সরাসরি পিতামাতাদের পেতে পারি, তবে আমার এই তথ্যটি উপরের দিকে রোল করার জন্য আমার সিটিই কীভাবে প্রসারিত করতে হবে তা জানতে চাই।
With DirectParents AS(
--initialization
Select InstanceID, ParentID
From Instances i
Where i.Part = 'Rivet'
UNION ALL
--recursive execution
Select i.InstanceID, i.ParentID
From PartInstances i INNER JOIN DirectParents p
on i.ParentID = p.InstanceID
)
select ParentID, Count(instanceid) as Totals
from DirectParents
group by InstanceID, ParentID
Results
-------
ID, Count
1 , 2
2 , 2
3 , 2
4 , 1
তৈরির স্ক্রিপ্ট
CREATE TABLE [dbo].[Instances] (
[InstanceID] NVARCHAR (50) NOT NULL,
[Part] NVARCHAR (50) NOT NULL,
[ParentID] NVARCHAR (50) NOT NULL, );
INSERT INTO Instances
Values
(1, 'Assembly', 0),
(50, 'Rivet', 1),
(50, 'Rivet', 1),
(2, 'SubAssembly', 1),
(50, 'Rivet', 2),
(51, 'Bolt', 2),
(51, 'Bolt', 2),
(3, 'SubSubAssembly', 2),
(50, 'Rivet', 3),
(50, 'Rivet', 3),
(4, 'SubAssembly2', 1),
(50, 'Rivet', 4),
(51, 'Bolt', 4)