مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

iran

عضویت از 1394/01/31

لیست زیرمجموعه های غیر فعال

  • پنجشنبه 22 آبان 1399
  • 12:25
تشکر میکنم

سلام
فرض کنید جدول زیر را داریم
 

CREATE TABLE [dbo].[Table_1](
	[Id] [int] NOT NULL,
	[Name] [nvarchar](50) NOT NULL,
	[ParentId] [int] NULL,
	[Status] [bit] NOT NULL,
 CONSTRAINT [PK_Table_1] 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;
INSERT INTO [dbo].[Table_1]
  ([Id],[Name],[ParentId] ,[Status] )
VALUES
  (1,'آسیا', null, 1), 
  (2,'ایران', 1, 1), 
  (3,'شهرری', 2, 0),
  (4,'کرج', 2, 1),
  (5,'مهرشهر', 4, 1),
  (6,'عظیمه', 4, 0);

 

حال می خواهم وقتی کد ایران را وارد کردم لیست تمام زیرمجموعه های غیر فعال ایران را برگرداند (فرزند اول تا فرزند فرزند....)
مثلا باتوجه به اطلاعات جدول بالا
خروجی لیست برابر با شهرری و عظیمه باشد
کد مروبطه را چگونه بنویسم

پاسخ های این پرسش

تعداد پاسخ ها : 3 پاسخ
کاربر سایت

بهزاد

عضویت از 1399/08/05

  • جمعه 23 آبان 1399
  • 03:32

سلام 

اگه اشتباه نکنم این Query کار شما رو راه می اندازه:

declare @parentId int = 2;
 
with tbl 
as 
(select *
    from Table_1 t 
    where t.Id = @parentId
    UNION ALL
    select t2.*
    from Table_1 t2
    join tbl 
    on t2.ParentId = tbl.Id)
select *
from tbl
where tbl.Status = 0 and tbl.Id > @parentId
order by Id;
کاربر سایت

بهزاد

عضویت از 1399/08/05

  • جمعه 23 آبان 1399
  • 03:35

پرانتز قبل از order by باید بعد از with tbl as باشه! البته کپی کنی درست میشه  و تو code block اشتباه نشون میده!

کاربر سایت

iran

عضویت از 1394/01/31

  • شنبه 24 آبان 1399
  • 07:26

سلام
کعادل این کد را در سی شارپ می خواستم

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)