Rank: Administration
Medals: Groups: Administrators
Joined: 10/20/2012 Posts: 106 Points: 327 Location: Tbilisi
Thanks: 0 times Was thanked: 0 time(s) in 0 post(s)
|
ამ ამოცანას С#-თან ნაკლებად აქვს რაიმე კავშირი. ეს უფრო მონაცემთა ბაზების კითხვაა . გთხოვთ სხვა შემთხვევაში, კითხვები დასვათ შესაბამის თემებში (SQL Server). ასევე: გარკვევით ჩამოაყალიბოთ ამოცანა და მოახდინოთ სატესტო მონაცემების წინასწარი მომზადებაახლა კი ვეცდებით მოგიყვანოთ მოკლე მაგალითი, თუ როგორ მოახდინოთ ამ ყველაფრის ორგანიზება SQL Server-ისათვის : 1. შევქმნათ საჭირო ცხრილები BB კოდი:SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[DepTable]( [ID] [int] NOT NULL, [DepName] [nvarchar](50) NULL, [ParentID] [int] NULL, CONSTRAINT [PK_DepTable] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[DepData]( [DepDataID] [int] NOT NULL, [DepID] [int] NULL, [info1] [date] NULL, [info2] [nvarchar](50) NULL, [info3] [money] NULL, CONSTRAINT [PK_DepData] PRIMARY KEY CLUSTERED ( [DepDataID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
ALTER TABLE [dbo].[DepData] WITH CHECK ADD CONSTRAINT [FK_DepData_DepTable] FOREIGN KEY([DepID]) REFERENCES [dbo].[DepTable] ([ID]) GO
ALTER TABLE [dbo].[DepData] CHECK CONSTRAINT [FK_DepData_DepTable] GO
ALTER TABLE [dbo].[DepTable] WITH CHECK ADD CONSTRAINT [FK_DepTable_DepTable] FOREIGN KEY([ParentID]) REFERENCES [dbo].[DepTable] ([ID]) GO
ALTER TABLE [dbo].[DepTable] CHECK CONSTRAINT [FK_DepTable_DepTable] GO
2. შევავსოთ სატესტო მონაცემები DepTable ცხილში BB კოდი:--SQL Server 2008 INSERT INTO DepTable(ID, DepName, ParentID) VALUES
(1, N'ადმინისტრაცია',NULL), (2, N'ბუღალტერია',1), (3, N'კადრები',1), (4, N'ლაბორატორია',1), (5, N'მექანიკური განყოფილება',1), (6, N'შვილი განყოფილება 1', 5), (7, N'შვილი განყოფილება 2', 5), (8, N'სამშენებლო განყოფილება',1), (9, N'შვილი განყოფილება 1', 8), (10,N'შვილი განყოფილება 2', 8) 3. ახლა გამოვიტანოთ იერარქიული სახით ყველა ის მონაცემი (დეპარტამენტი) DepTable ცხრილიდან, რომელიც შედის "ადმინისტრაციაში" BB კოდი:-- SQL Server 2005, 2008 DECLARE @parID int; SET @parID = 1; WITH cte AS ( SELECT ID, DepName, ParentID, 0 AS nlevel FROM DepTable WHERE (ID = @parID) UNION ALL SELECT a.ID, a.DepName, a.ParentID, b.nlevel + 1 AS nlevel FROM DepTable AS a INNER JOIN cte AS b ON b.ID = a.ParentID ) SELECT ID, DepName, ParentID FROM cte -- რეზულტატი : ქუოტა (Quote):ID DepName ParentID ----------- -------------------------------------------------- ----------- 1 ადმინისტრაცია NULL 2 ბუღალტერია 1 3 კადრები 1 4 ლაბორატორია 1 5 მექანიკური განყოფილება 1 8 სამშენებლო განყოფილება 1 9 შვილი განყოფილება 1 8 10 შვილი განყოფილება 2 8 6 შვილი განყოფილება 1 5 7 შვილი განყოფილება 2 5
(10 row(s) affected) 4. ახლა კი იგივე SELECT-ით გამოვიტანოთ იერარქიული სახით ყველა ის მონაცემი (დეპარტამენტი) DepTable ცხრილიდან, რომელიც შედის "სამშენებლო განყოფილება"-ში BB კოდი:-- SQL Server 2005, 2008 DECLARE @parID int; SET @parID = 8; WITH cte AS ( SELECT ID, DepName, ParentID, 0 AS nlevel FROM DepTable WHERE (ID = @parID) UNION ALL SELECT a.ID, a.DepName, a.ParentID, b.nlevel + 1 AS nlevel FROM DepTable AS a INNER JOIN cte AS b ON b.ID = a.ParentID ) SELECT ID, DepName, ParentID FROM cte -- რეზულტატი : ქუოტა (Quote):ID DepName ParentID ----------- -------------------------------------------------- ----------- 8 სამშენებლო განყოფილება 1 9 შვილი განყოფილება 1 8 10 შვილი განყოფილება 2 8
(3 row(s) affected) 5. ახლა კი ვცადოთ იმ მონაცემების გამოტანა DepData ცხრილიდან, რომლებიც შეესაბამება "სამშენებლო განყოფილება"-სა და მის დაქვემდებარებაში მყოფ ყველა სხვა განყოფილებას BB კოდი:DECLARE @parID int; SET @parID = 8; WITH cte AS ( SELECT ID, DepName, ParentID, 0 AS nlevel FROM DepTable WHERE (ID = @parID) UNION ALL SELECT a.ID, a.DepName, a.ParentID, b.nlevel + 1 AS nlevel FROM DepTable AS a INNER JOIN cte AS b ON b.ID = a.ParentID ) SELECT d.DepDataID, d.DepID, d.info1, d.info2, d.info3 FROM DepData AS d INNER JOIN DepTable AS t ON d.DepID = t.ID vajaGM attached the following image(s): DepTable Diagram.PNG (12kb) downloaded 11 time(s).
|
1 user thanked vajaGM for this useful post.
|
|