# پایگاه‌های داده > SQL Server > T-SQL >  واکشی اطلاعات یک فیلد شماره تلفن با شماره های متفاوت و نامهای یکسان و نمایش در جلوی هر نام

## reza4359

سلام دوستان
چطوری امکانش هست که اینکار را انجام بدیم:

شماره تلفن






32260467
سجاد
رضایی
8
1756636125

امیر

32260474
سجاد
رضایی
8
1756636125

امیر

32260476
سجاد
رضایی
8
1756636125

امیر

32260477
سجاد
رضایی
8
1756636125

امیر

32268541
سجاد
رضایی
8
1756636125

امیر

32269221
سجاد
رضایی
8
1756636125

امیر









































 اسم و فامیل یکسانه ولی شماره تلفنهای اون متفاوته
حالا میخوام با یک select  اسم و فامیل را در یک رکورد بیاره و شماره های متفاوت اون را جلوی آن نمایش بده
باید چکار کرد؟
ممنون

----------


## Mahmoud.Afrad

https://barnamenevis.org/showthread.php?510710

https://barnamenevis.org/showthread.php?372614

----------


## reza4359

> https://barnamenevis.org/showthread.php?510710
> 
> https://barnamenevis.org/showthread.php?372614


ممنون ولی مشکل حل نشد اگه ممکنه راهنمایی کنید باید چکار کرد؟

----------


## reza4359

سلام دوستان
من یکبار دیگه توضیح بدم
من میخوام چندین ستون که اطلاعات فیلد های اونها با هم یکسانه و فقط شماره تلفن اونها با هم فرق میکنه را شماره تلفن های اون شخص را تجمیع کنم  و در جلوی اون رکورد قرار بدم که اگه مثلا 10 تا رکورد برای اون شخص ثبت شده اونو به یک رکورد تبدیل کنم و  فقط شماره های تلفن  اون را جلوی رکورد اون شخص که یک رکورد هست قرار بدم

----------


## mahyar501

بهترین راه اینه که تلفنهای هر شخص رو توی یک فیلد بصورت xml ذخیره کنی. همونطور که یکی از دوستان دو تا لینک برات گذاشت

----------


## reza4359

> بهترین راه اینه که تلفنهای هر شخص رو توی یک فیلد بصورت xml ذخیره کنی. همونطور که یکی از دوستان دو تا لینک برات گذاشت


ممنون 
میتونید یک مثال در این زمینه بزنید 
خیلی بهش نیاز دارم

----------


## aslan

سلام
لینک زیر را ببینید :
https://www.mssqltips.com/sqlservert...l-server-data/

----------


## reza4359

دوستان من این دستور select  را براش نوشتم ولی بازم یک رکورد را واکشی نمیکنه
SELECT SS.lname,STUFF((SELECT '; ' + US.tel FROM tbl_tel US WHERE US.id = SS.id ORDER BY tel FOR XML PATH('')), 1, 1, '') [no1] FROM tbl_tel SS GROUP BY SS.id, SS.lname ORDER BY 1
اینم جدول:
122.jpgباید چکار کرد؟
کد را چطوری تغییر بدم؟

----------


## aslan

سلام
شکلهای زیر را ببینید :

Phone.gif
Phone2.gif

----------


## Mahmoud.Afrad

> دوستان من این دستور select  را براش نوشتم ولی بازم یک رکورد را واکشی نمیکنه
> SELECT SS.lname,STUFF((SELECT '; ' + US.tel FROM tbl_tel US WHERE US.id = SS.id ORDER BY tel FOR XML PATH('')), 1, 1, '') [no1] FROM tbl_tel SS GROUP BY SS.id, SS.lname ORDER BY 1
> اینم جدول:
> 122.jpgباید چکار کرد؟
> کد را چطوری تغییر بدم؟


این جدول شما نرمال نیست. باید یک جدول برای شخص و یک جدول برای تلفن داشته باشید که با کد شخص در ارتباط هستند.
http://stackoverflow.com/questions/5...iter-in-column

----------


## reza4359

ممنونم دوست عزیز من اومدم از دو جدول استفاده کردم و مشکل حل شد 
فقط شماره ها رو با این دستور select  میاد همه را داخل یک فیلد با کاما از هم جدا میکنه اگه بخوام هر شماره ای را داخل یک فیلد جدا گانه بذارم باید چکار کنم؟
کد به چه صورت تغییر میکنه؟
Unt.jpg
الان به این صورت هست (عکس بالا)
حالا میخوام هر شماره ای را در یک فیلد جداگانه قرار بدم
باید چکار کنم؟
دوستان یک موضوع دیگه اینکه من اطلاعات رو از طریق یک فایل اکسل وارد دیتابیس میکنم و امکان تعریف id  نیست که با توجه به id  بیام گروه بندی کنم
من یک فایل اکسل را وارد دیتابیس میکنم و یک فایل دیگه اکسل وارد میکنم و فایل دومی میاد داخل فایل اولی جستجو میکنه و شماره هایی را که مربوط به آن اسامی هست را جلوی هر نام وارد میکنه و اگر مثلا 10 رکورد سعید رجایی داریم میاد اونها رو به یک رکورد تبدیل میکنه و تمام شماره هاشو جلوی او میاره 
حالا فقط مشکل اینه که شماره ها رو بیاد هر کدوم را داخل یک فیلد قرار بده نه همه رو داخل یک فیلد



دوستان این کدیه که استفاده کردم
  SqlConnection con = new SqlConnection();
            SqlCommand cmd = new SqlCommand();
            con.ConnectionString = strCon;
            SqlDataAdapter adapt = new SqlDataAdapter();
            adapt.SelectCommand = new SqlCommand();
            adapt.SelectCommand.Connection = con;
            adapt.SelectCommand.CommandText = string.Format("SELECT ss.tel,SS.lname,ss.name,ss.shsh,ss.meli,ss.birthda  y,ss.father,STUFF((SELECT '  |  ' + US.tel FROM tbl_tel US WHERE (US.meli = SS.meli)  and  (US.lname=SS.lname) and (US.name=SS.name) and (US.father=SS.father) ORDER BY tel FOR XML PATH('')), 1, 1, '') [no1] FROM tbl_ic SS GROUP BY  ss.tel,SS.lname,ss.name,ss.shsh,ss.meli,ss.birthda  y,ss.father ORDER BY 1");
          
            System.Data.DataTable dt = new System.Data.DataTable();
            adapt.Fill(dt);

            dataGridViewX5.DataSource = dt;
            dataGridViewX5.Visible = true;
            dataGridViewX5.Update();
            dataGridViewX5.Refresh();
تمام شماره ها داخل فیلد [no1 ]  که داخل دستور select  گذاشتم نمایش داده میشه
حالا میخوام این کد را تغییر بدم که هر شماره داخل یک فیلد جداگانه نشون داده بشه 
حالا باید جه کاری انجام بدم؟

----------


## Mahmoud.Afrad

ببینید، چون تعداد تلفن ها ثابت نیست ، ایجاد ستون برای هر تلفن به این راحتی نیست که با یک تغییر کوچک در کوئری تون بتونید عملیش کنید.

راهنمایی که میتونم بکنم اینه که با dynamic pivot میتونید به جواب برسید(که البته از لحاظ امنیتی توصیه نمیشه  ولی در جایی که تنها راه حل هست مجبور به استفاده هستید)

----------


## reza4359

ممنون
حالا اگه امکانش هست  درباره dynamic pivot یک توضیحی بدهید.

----------


## juza66

سلام

دوستان اشاره کردن، شما دو جدول یکی کد مشتری و نام مشتری و جدول دومی کد مشتری و شماره تلفن مشتری بذار و اینجور واکشی کن.

----------


## ژیار رحیمی

مشکل شما طراحی نامتعارف جدول هست بهتر طراحی جدول رو اصلاح کنی(آنچه جناب افراد بهش اشاره کردن). به نظر من همون کویری قبلی که اجتماع شماره ها رو داخل یک ستون می ریزی کفایت کن .سپس با اصلاح ستون آخر(شماره ها) در DataTable میتونی به نتیجه یی که میخوای برسی

----------


## reza4359

> مشکل شما طراحی نامتعارف جدول هست بهتر طراحی جدول رو اصلاح کنی(آنچه جناب افراد بهش اشاره کردن). به نظر من همون کویری قبلی که اجتماع شماره ها رو داخل یک ستون می ریزی کفایت کن .سپس با اصلاح ستون آخر(شماره ها) در DataTable میتونی به نتیجه یی که میخوای برسی


ممنونم آقای رحیمی لطفا بگین چطوری با تغییر data table  میشه ستون اخر را تفکیک کرد و هر شماره ای را داخل یک فیلد ریخت؟

----------


## ژیار رحیمی

ابتدا باید ماکزیمم تعداد ستون هایی که قرار به دیتاتیبل اضافه شود بدست بیاری با بدست آوردن بیشترین طول ستون آخر(اجتماع شماره ها) و تفکیک آن ،تعداد ستون های ماکزیمم بدست میاد.
سپس به تعداد ماکزیمم ستون بدست امده ،ستون به دیتاتیبل اضافه کن.پس با یک حلقه for روی دیتاتیبل ( ستون مورد نظر را تفکیک و  مقادیر رادر ستونهای متناظر دیتاتیبل قرار بده)در آخر هم میتونی ستون اضافه(اجتماع شماره ها) را از دیتاتیبل حذف نمایی

----------


## reza4359

ممنونم مهندس رحیمی از راهنمایی شما
چطوری اجتماع شماره ها را که داخل یک فیلد هست را از هم تفکیک کنم ؟
ماکزیمم شماره ها هم معلومه حداکثر 10 شماره تلفن
بازم ممنون از وقتی که گذاشتید

----------


## ژیار رحیمی

خب از تصویر بالا که نتیجه کویری داخل دیتاگرید ریختی شما از کاراکتر | برای جدا سازی شماره ها استفاده کردی کافیه محتوای سلول که یک رشته هست را با split کردن ،جداسازی کرد.

----------


## Mahmoud.Afrad

> ممنونم مهندس رحیمی از راهنمایی شما
> چطوری اجتماع شماره ها را که داخل یک فیلد هست را از هم تفکیک کنم ؟
> ماکزیمم شماره ها هم معلومه حداکثر 10 شماره تلفن
> بازم ممنون از وقتی که گذاشتید


دوستان در مورد دیتاتیبل توضیح میدن ، من دیگه وارد نمیشم.
اما در مورد pivot ؛ چون حداکثر برای تعداد تلفن ها تعیین کردید با یک pivot قابل حل هست.(اگر تعداد تلفن ها حداکثر نداشته باشه یا تعداد زیاد باشه ، کوئری زیر جوابگو نیست)

اگر جدول تلفن ها رو به صورت زیر فرض کنیم:
CREATE TABLE [dbo].[Telephone](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [personId] [int] NULL,
    [phoneNumber] [varchar](50) NULL,
 CONSTRAINT [PK_Telephone] 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]
کوئری زیر جواب شماست
declare @t as TABLE( id int , personid int , phone varchar(max) , rownumber bigint);

insert into @t
select
    *,
    ROW_NUMBER() over (PARTITION by personid order by id asc) as rownumber
from telephone

select
    ttt.personid,
    max([1]) ,
    max([2]) ,
    max([3]) ,
    max([4]) ,
    max([5]) ,
    max([6]) ,
    max([7]) ,
    max([8]) ,
    max([9]) ,
    max([10])
from
(
    select
        pppp.personid, [1] , [2] , [3] , [4] , [5] , [6] , [7] , [8] , [9] , [10]
    from @t
    pivot
    (
        max(phone)
        for rownumber
        in([1] , [2] , [3] , [4] , [5] , [6] , [7] , [8] , [9] , [10])
    ) as pppp
) ttt
group by personid
خروجی رو میتونید با جدول اشخاص join کنید. اگر هم نمیتونید جدولها رو تفکیک کنید، کافیه قسمت کوئری بالا رو اصلاح کنید.

----------


## reza4359

> خب از تصویر بالا که نتیجه کویری داخل دیتاگرید ریختی شما از کاراکتر | برای جدا سازی شماره ها استفاده کردی کافیه محتوای سلول که یک رشته هست را با split کردن ،جداسازی کرد.


ممنون
بعد از جدا سازی به چه صورت هر شماره را داخل یک فیلد بذارم 
میشه از طریق کد توضیح بدید ممنون میشم

----------


## reza4359

سلام آقای افراد ممنونم از کدی که گذاشتید
مشکل من اینه که اطلاعات از طریق فایل اکسل وارد میشه و اطلاعات داخل فایل مشخصه  و نمیشه براش id و یا کلید خارجی تعریف کرد
به این صورت که ما یک فایل اکسل داریم متشکل از 7 فیلد و این فایل در دیتابیس دخیره میشه
و یک فایل دیگه داریم بازم متشکل از 7 فیلد حالا میخوام وقتی فایل دوم وارد شد بره و داخل دیتابیس جستجو کنه و شماره تلفن ها رو واکشی کنه
و هر شماره ای را داخل یک فیلد جلوی  مشخصات اون فرد بریزه
حالا مشکل من الان فقط تفکیک اون شماره هاست که همه داخل یک فیلد قرار دارند و با "|" از هم جدا شدند میخوام اینها رو از اون فیلد هر کدام را به فیلد جدا گانه ای انتقال بدم و هر شماره داخل یک فیلد قرار بگیره
حالا من با کوئری بالا مشکل واکشی شماره را به طور دقیق داخل یک فیلد انجام دادم 
حالا اگه ممکنه از طریق کد یه توضیح بدید چطوری شماره های داخل  این یک فیلد را با تغییر در data table به چند فیلد تغییر بدم که هر شماره بره داخل یک فیلد

----------


## Mahmoud.Afrad

اسکریپت جداولی که دخیل هستند رو قرار بدید.



پ.ن:
دیتابیس sqlserver رو که خود شما طراحی کردید، درسته؟     حالا فایل اکسل هر اشتباهی داره چرا سعی نمیکنید طراحیتون رو درست کنید؟ یک ستون کلید اصلی به جدول اشخاص اضافه کنید و رابطه برقرار کنید. یا حتی میتونید ستون کد ملی رو کلید کنید.

----------


## juza66

> حالا اگه ممکنه از طریق کد یه توضیح بدید چطوری شماره های داخل  این یک  فیلد را با تغییر در data table به چند فیلد تغییر بدم که هر شماره بره  داخل یک فیلد


اول تعداد تلفن دریافت شده رو مشخص کن و تویی آرایه بریز
بعدش با یک حلقه -  کولن اضاف کن و متغییرت رو بهش پاس بده


یک سوال: چرا نظرات دوستان و اساتید رو توجه نمیکنید؟! دلیل خاصی داره؟ یعنی کار انجام شده و مشکل در نمایش دارید؟! نمیشه اصولی که دوستان اشاره کردن رعایت شود؟

----------


## reza4359

> اسکریپت جداولی که دخیل هستند رو قرار بدید.
> 
> 
> 
> پ.ن:
> دیتابیس sqlserver رو که خود شما طراحی کردید، درسته؟     حالا فایل اکسل هر اشتباهی داره چرا سعی نمیکنید طراحیتون رو درست کنید؟ یک ستون کلید اصلی به جدول اشخاص اضافه کنید و رابطه برقرار کنید. یا حتی میتونید ستون کد ملی رو کلید کنید.


آقای افراد من جدولم را باید بر اساس فایل اکسلی که وارد میشه طراحی کنم
اگه یک فیلد ازش کم یا زیاد بشه که فایل وارد دیتابیس نمیشه وخطا میده فیلد های فایل اکسل و جدول دیتابیس باید تعدادش یکی باشه وگرنه خطامیده
اطلاعات وارد شده هم زیاده 300000 هزار داده  یکجا وارد دیتابیس میشه
اگه امکانش هست روش دیتاتیبل را برام توضیح بدید چطوری با تغییر در دیتاتیبل و روش split  کردن رشته با توجه به کوئری بالا میتونم شماره  رو تفکیک کنم
با این روش مشکلم حل میشه

----------


## Mahmoud.Afrad

اسکریپت جداولی که دخیل هستند رو قرار بدید.

----------


## reza4359

> اسکریپت جداولی که دخیل هستند رو قرار بدید.


دو جدول بهنامهای tbl_tel1 که اطلاعات اولیه هستند و با اکسل وارد میشوند و او فیلد های no1 , no2 ...  هم فیلد هایی هست که قراره شماره های تفکیک شده در هر کدوم از اینها قرار بگیره
CREATE TABLE [dbo].[tbl_tel1](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [int] NULL,
    [lname] [varchar](50) NULL,
     [tel] [varchar](50) NULL,
      [shsh] [varchar](50) NULL,
       [meli] [varchar](50) NULL,
        [birthday] [varchar](50) NULL,
         [father] [varchar](50) NULL,
          [no1] [varchar](50) NULL,
           [no2] [varchar](50) NULL,
            [no3] [varchar](50) NULL,
              [no4] [varchar](50) NULL,
                [no5] [varchar](50) NULL,
                  [no6] [varchar](50) NULL,
                    [no7] [varchar](50) NULL,
                      [no8] [varchar](50) NULL,
                        [no9] [varchar](50) NULL,
            [no10] [varchar](50) NULL
          

 CONSTRAINT [PK_tel] 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] 
یک جدول دیگه هم به نام tbl_ic1  که اطلاعات درون اون با جدول اول مقایسه و مورد جستجو قرار میگیره و این جدول هم از طریق اکسل وارد برنامه میشه
CREATE TABLE [dbo].[tbl_ic1](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name]  [varchar](50) NULL,
    [lname] [varchar](50) NULL,
     [tel] [varchar](50) NULL,
      [shsh] [int] NULL,
       [meli] [int] NULL,
        [birthday] [varchar](50) NULL,
         [father] [varchar](50) NULL  
          

 CONSTRAINT [PK_tel] 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]

----------


## Mahmoud.Afrad

کدی که بنده گذاشتم رو کمی دستکاری میکردید به جواب میرسیدید.

declare @t as TABLE([meli] [varchar](50) NULL, [tel] [varchar](50) NULL, rownumber bigint);
 
insert into @t([meli], [tel], rownumber)
select [meli], [tel], ROW_NUMBER() over (PARTITION by [meli] order by [tel] asc) as rownumber
from tbl_tel

select *
from tbl_ic1
join (select Pivotresult_Set.[meli] ,
             max([1]) as [no1] , max([2]) as [no2] , max([3]) as [no3] , max([4]) as [no4] , 
             max([5]) as [no5] , max([6]) as [no6] , max([7]) as [no7] , max([8]) as [no8] , 
             max([9]) as [no9] , max([10]) as [no10]
     from (
            select Pivot_Set.meli, [1] , [2] , [3] , [4] , [5] , [6] , [7] , [8] , [9] , [10]
            from @t
            pivot 
            ( max(tel) 
              for rownumber in([1] , [2] , [3] , [4] , [5] , [6] , [7] , [8] , [9] , [10])
              ) as Pivot_Set
          ) Pivotresult_Set
        group by Pivotresult_Set.[meli] 
    ) Tel_Set
on tbl_ic1.meli = Tel_Set.[meli]
اگر نیاز به آپدیت هست میتونید همین کوئری رو تغییر بدید تا tbl_tel1 آپدیت بشه.

----------


## reza4359

واقعا ممنونم آقای افراد مشکل حل شد 
واقعا نمیدونم چطوری ازتون تشکر کنم خیلی لطف کردید
حالا اگه بخوام یه شرط (where ) به این کوئری اضافه کنم باید کدوم قسمتش بذارم
مثلا اگر فقط بر اساس نام و نام خانوادگی شماره هار رو بیاره یا بر اساس فقط کد ملی یا نام پدر

----------


## reza4359

> کدی که بنده گذاشتم رو کمی دستکاری میکردید به جواب میرسیدید.
> 
> declare @t as TABLE([meli] [varchar](50) NULL, [tel] [varchar](50) NULL, rownumber bigint);
>  
> insert into @t([meli], [tel], rownumber)
> select [meli], [tel], ROW_NUMBER() over (PARTITION by [meli] order by [tel] asc) as rownumber
> from tbl_tel
> 
> select *
> ...


کد اولی که گذاشتید درست جواب داد ولی این بالایی را که اصلاح کردید میاد سه تا فیلد جا میذاره و بعد دوباره کد ملی را insert میکنه
و بعد شماره ها را داخل فیلد های 4 به بعد میذاره

----------


## Mahmoud.Afrad

> کد اولی که گذاشتید درست جواب داد ولی این بالایی را که اصلاح کردید میاد سه تا فیلد جا میذاره و بعد دوباره کد ملی را insert میکنه
> و بعد شماره ها را داخل فیلد های 4 به بعد میذاره


اگر تغییری در کد دادید باید بگید چه تغییری ؛ و اینکه منظورت از insert چیه؟ داری نتیجه سلکت بالا رو insert میکنی یا آپدیت یا فقط از سلکت اجرا میگیری؟

----------


## reza4359

> اگر تغییری در کد دادید باید بگید چه تغییری ؛ و اینکه منظورت از insert چیه؟ داری نتیجه سلکت بالا رو insert میکنی یا آپدیت یا فقط از سلکت اجرا میگیری؟


من فقط کوئری شما را در بالا اجرا کردم بدون هیچ تغییری
من مشکلم با اون کوئری که قبل از این گذاشتید حل شد ممنون
حالا اگه بخوام یک شرط (where ) به این کوئری اضافه کنم باید این شرط را کدوم قسمتش بذارم؟
مثلا اگر فقط بر اساس نام و نام خانوادگی شماره هار رو بیاره یا بر اساس فقط کد ملی یا نام پدر

----------


## Mahmoud.Afrad

> من فقط کوئری شما را در بالا اجرا کردم بدون هیچ تغییری
> من مشکلم با اون کوئری که قبل از این گذاشتید حل شد ممنون
> حالا اگه بخوام یک شرط (where ) به این کوئری اضافه کنم باید این شرط را کدوم قسمتش بذارم؟
> مثلا اگر فقط بر اساس نام و نام خانوادگی شماره هار رو بیاره یا بر اساس فقط کد ملی یا نام پدر


بعد از join میتونید شرط اعمال کنید

select ...
from ...
join ...
on ....
where ...

----------


## reza4359

> بعد از join میتونید شرط اعمال کنید
> 
> select ...
> from ...
> join ...
> on ....
> where ...


من میخوام این شرط را اعمال کنم خطا میده 
مقایسه فقط نام و نام خانوادگی یعنی بیاد فقط بر اساس مام و نام خانوادگی جستجو کنه

where (tbl_tel.name=tbl_ic.name) and (tbl_tel.lname=tbl_ic.lname)

----------


## Mahmoud.Afrad

> من میخوام این شرط را اعمال کنم خطا میده 
> مقایسه فقط نام و نام خانوادگی یعنی بیاد فقط بر اساس مام و نام خانوادگی جستجو کنه
> 
> where (tbl_tel.name=tbl_ic.name) and (tbl_tel.lname=tbl_ic.lname)


فکر کتم منظورت شرط join هست درسته؟ کد ملی مولفه بهتری برای join هست چون هر کس کد ملی منحصر به فردی داره. چرا به این شرط نیاز داری؟ مگر کد ملی در هر دو جدول وجود نداره؟

----------


## reza4359

> فکر کتم منظورت شرط join هست درسته؟ کد ملی مولفه بهتری برای join هست چون هر کس کد ملی منحصر به فردی داره. چرا به این شرط نیاز داری؟ مگر کد ملی در هر دو جدول وجود نداره؟


میخوام بر اساس تک تک فیلدهای دو جدول جستجو و مقایسه کنه
من یه جستجوی کلی دارم که اون رو با کد ملی انجام میدم
و یک جستجوی مقایسه ای با تک تک فیلد ها مثلا نام و نام خانوادگی یا نام پدر یا شماره شناسنامه
حالا جستجوی کلی مشکلی نداره از join  کد ملی استفاده میکنم حالا برای مقایسه با نام خانوادگی باید شرطم را کجا قرار بدم؟
بعد از join  قرار دادم به نام و نام خانوادگی خطا میده که اینها وجود ندارند باید جدول  tbl_tel  را کجا براش تعریف کنم
مهندس افراد یک مشکل دیگه هم هست که این اطلاعات که با اکسل وارد میشه ممکنه فردی کد ملی نداشته باشه اونوقت کلید خارجی کد ملی چی میشه؟
تکلیف چیه؟ بر چه اساسی جستجو و مقایسه صورت میگیره؟

----------


## Mahmoud.Afrad

> میخوام بر اساس تک تک فیلدهای دو جدول جستجو و مقایسه کنه
> من یه جستجوی کلی دارم که اون رو با کد ملی انجام میدم
> و یک جستجوی مقایسه ای با تک تک فیلد ها مثلا نام و نام خانوادگی یا نام پدر یا شماره شناسنامه
> حالا جستجوی کلی مشکلی نئاره از join  کد ملی استفاده میکنم حالا برای مقایسه با نام خانوادگی باید شرطم را کجا قرار بدم؟
> بعد از join  قرار دادم به نام و نام خانوادگی خطا میده که اینها وجود ندارند باید جدول  tbl_tel  را کجا براش تعریف کنم


یعنی میخواهید مثلا با گرفتن نام و نام خانوادگی یا ...  اطلاعات شخص رو همراه شماره تلفنهاش رو جستجو کنید؟ چیزی شبیه جستجوی پیشرفته.

----------


## reza4359

> یعنی میخواهید مثلا با گرفتن نام و نام خانوادگی یا ...  اطلاعات شخص رو همراه شماره تلفنهاش رو جستجو کنید؟ چیزی شبیه جستجوی پیشرفته.


آره مهندس اطلاعات دو جدول که از طریق اکسل وارد دیتابیس میشه تعداد فیلد هاش یکسانه 
میخوام اگه مثلا بر اساس کد ملی چک کرد و کد ملی نداشت بره سراغ نام خانوادگی و اگه نداشت نام پدر یا شماره شناسنامه و..
من چند تا check box  گذاشتم به اسم نام و نام خانوادگی ، نام پدر ، کد ملی و..
میخوام ترکیب هر کدوم را زدم (یعنی مثلا نام و نام خانوادگی ) بر اون اساس  جستجو کنه

----------


## Mahmoud.Afrad

https://barnamenevis.org/showthread.p...D8%B1-Database
https://barnamenevis.org/showthread.p...ored-procedure

----------


## reza4359

آقای افراد من الان مشکلم اینه که وقتی میخوام بعد از join  یه شرط بذارم و  فیلد tbl_tel.name یا  tbl_tel.lname  را بذارم برای شرط نام و نام  خانوادگی جدول tbl_tel  را نمیشناسه و میگه اینا وجود ندارن 
چکار کنم که فیلد های جدول  tbl_tel  را هم مثل جدول  tbl_ic  بشناسه 
هر کاری کردم نشد
این پیغام را میده

{"Column name or number of supplied values does not match table definition."}

----------

