PDA

View Full Version : خواندن اطلاعات از جدول دیگر



alirezash
دوشنبه 09 فروردین 1395, 14:58 عصر
سلام دوستان
سال نو مبارک
یک سوال من در یکی از جدول های sql در یک فیلد مقدار 1,2,5,7,11,4 دارم .
این اعداد مربوط به Id یک جدول دیگه می باشد. ( مثلا علیرضا id=1 , رضا id=2)
چجوری می تونم با query برای نمایش بجای عدد ها اسم طرف رو نمایش بدم .(علیرضا , رضا , میثم )

keiv@n
دوشنبه 09 فروردین 1395, 15:21 عصر
سلام
سال نو شما هم مبارک باشه
باید از join دو جدول استفاده کنید و در سلکت مربوطه بجای id از name استفاده کنید

alirezash
دوشنبه 09 فروردین 1395, 15:33 عصر
دوست عزیز .
یک id که نیست .

keiv@n
دوشنبه 09 فروردین 1395, 15:52 عصر
کدوم قسمت از صحبت های بنده اشاره به یک id داشت ؟
برای راهنمایی دقیق تر ، لطف کنید نام جدول های مورد استفاده به همراه فیلد هاشون و خروجی که قرار است نمایش داده شود را ذکر کنید تا مثال کوئری برایتان بیاورم

alirezash
دوشنبه 09 فروردین 1395, 15:59 عصر
139759
مثل جدول بالا

alirezash
سه شنبه 10 فروردین 1395, 03:12 صبح
کسی نیست راهنمایی کنه ؟

keiv@n
سه شنبه 10 فروردین 1395, 10:17 صبح
create table ##TMPResult (Id int,NameAndFamily nvarchar(500))
select Id,Emp_id into ##TMP1 from table2


declare @sql nvarchar(max)
declare @i int
set @i = (select count(*) from ##TMP1)-- Temp گرفتن تعداد عناصر جدول
declare @CurrentId int
declare @CurrentRow nvarchar(100)
while @i > 0
begin
set @CurrentRow = (select top 1 Emp_id from ##TMP1)
set @CurrentId = (select top 1 Id from ##TMP1)
declare @sqlParamOut nvarchar(500)


set @sql = 'set @sqlOut = '''''
+'select @sqlOut = '
+' coalesce (case when @sqlOut = '''''+
+' then name+'' ''+Family'
+' else @sqlOut + '','' + name+'' ''+Family'
+' end,'''')'
+' from table1 where id in ('+@CurrentRow+')'
print @sql
exec sp_executesql @sql,N'@sqlOut nvarchar(500) out',@sqlOut = @sqlParamOut out


print @sqlParamOut
insert ##TMPResult (Id,NameAndFamily) values(@CurrentId,@sqlParamOut)


delete top (1) from ##TMP1
set @i = @i - 1
end
select tbl2.Id,tbl2.Time1,tbl2.Time2,TMP.NameAndFamily from table2 as tbl2 join ##TMPResult as TMP on tbl2.Id = TMP.Id




drop table ##TMP1
drop table ##TMPResult

keiv@n
سه شنبه 10 فروردین 1395, 10:35 صبح
سورس فایل ها :

alirezash
سه شنبه 10 فروردین 1395, 12:08 عصر
دوست عزیز . واقعا ممنونم . ایشاالله هرچی از خدا می خوای بهت بده .
فقط یک سوال دیگه .
مقدور هست یک جدول دیگه مثل اسم و فامیل بهش اضافه کنید ؟
یعنی مثل جدول 2 یک فیلد دیگه اضافه بشه . که همانند فیلد EMP_ID یک مقدار دیگه از یک جدول دیگه بخونه.

alirezash
سه شنبه 10 فروردین 1395, 12:15 عصر
یک مشکل دیگه وجود داره . اگه فیلد EMP_ID خالی باشه . مقدار فیلد ردیف قبلی را نشون میده

keiv@n
سه شنبه 10 فروردین 1395, 15:30 عصر
یک مشکل دیگه وجود داره . اگه فیلد EMP_ID خالی باشه . مقدار فیلد ردیف قبلی را نشون میده
خیلی عذر می خوام تستش نکده بودم
اصلاحیه :

create table ##TMPResult (Id int,NameAndFamily nvarchar(500))
select Id,Emp_id into ##TMP1 from table2


declare @sql nvarchar(max)
declare @i int
set @i = (select count(*) from ##TMP1)-- Temp
declare @CurrentId int
declare @CurrentRow nvarchar(100)
while @i > 0
begin
set @CurrentRow = (select top 1 Emp_id from ##TMP1)
set @CurrentId = (select top 1 Id from ##TMP1)
declare @sqlParamOut nvarchar(500)
if len(@CurrentRow)>0
begin
set @sql = 'set @sqlOut = '''''
+'select @sqlOut = '
+' coalesce (case when @sqlOut = '''''+
+' then name+'' ''+Family'
+' else @sqlOut + '','' + name+'' ''+Family'
+' end,'''')'
+' from table1 where id in ('+@CurrentRow+')'
print @sql
exec sp_executesql @sql,N'@sqlOut nvarchar(500) out',@sqlOut = @sqlParamOut out


print @sqlParamOut
insert ##TMPResult (Id,NameAndFamily) values(@CurrentId,@sqlParamOut)
end


delete top (1) from ##TMP1
set @i = @i - 1
end
select tbl2.Id,tbl2.Time1,tbl2.Time2,TMP.NameAndFamily from table2 as tbl2 left join ##TMPResult as TMP on tbl2.Id = TMP.Id




drop table ##TMP1
drop table ##TMPResult

keiv@n
سه شنبه 10 فروردین 1395, 15:33 عصر
دوست عزیز . واقعا ممنونم . ایشاالله هرچی از خدا می خوای بهت بده .
فقط یک سوال دیگه .
مقدور هست یک جدول دیگه مثل اسم و فامیل بهش اضافه کنید ؟
یعنی مثل جدول 2 یک فیلد دیگه اضافه بشه . که همانند فیلد EMP_ID یک مقدار دیگه از یک جدول دیگه بخونه.
بوسیله join می تونید این کار رو انجام بدین شرط join باید روی فیلد Id باشد
اگر مشکلی بود سوال رو مانند حالت شماتیک که قبلا گفتین مطرح کنید براتون کوئری شو بنویسیم
مرسی

alirezash
سه شنبه 10 فروردین 1395, 17:19 عصر
بخدا شرمنده . ایشالله بتونم جبران کنم
139780

keiv@n
چهارشنبه 11 فروردین 1395, 04:28 صبح
create table ##TMP_EMPResult (Id int,NameAndFamily nvarchar(500))
create table ##TMP_CityResult (Id int,CityConcatenation nvarchar(500))
select Id,Emp_id,City_id into ##TMP1 from table2


declare @sql nvarchar(max)
declare @i int
set @i = (select count(*) from ##TMP1)-- Temp
declare @CurrentId int
declare @CurrentEMP_IdRow nvarchar(100)
declare @CurrentCity_IdRow nvarchar(100)
while @i > 0
begin
set @CurrentId = (select top 1 Id from ##TMP1)
set @CurrentEMP_IdRow = (select top 1 Emp_id from ##TMP1)
set @CurrentCity_IdRow = (select top 1 City_ID from ##TMP1)
declare @sqlParamOut nvarchar(500)
if len(@CurrentEMP_IdRow)>0
begin
set @sql = 'set @sqlOut = '''''
+'select @sqlOut = '
+' coalesce (case when @sqlOut = '''''+
+' then name+'' ''+Family'
+' else @sqlOut + '','' + name+'' ''+Family'
+' end,'''')'
+' from table1 where id in ('+@CurrentEMP_IdRow+')'
print @sql
exec sp_executesql @sql,N'@sqlOut nvarchar(500) out',@sqlOut = @sqlParamOut out


print @sqlParamOut
insert ##TMP_EMPResult (Id,NameAndFamily) values(@CurrentId,@sqlParamOut)
end
if len(@CurrentCity_IdRow)>0
begin
set @sql = 'set @sqlOut = '''''
+'select @sqlOut = '
+' coalesce (case when @sqlOut = '''''+
+' then city'
+' else @sqlOut + '','' + city'
+' end,'''')'
+' from table3 where id in ('+@CurrentCity_IdRow+')'
print @sql
exec sp_executesql @sql,N'@sqlOut nvarchar(500) out',@sqlOut = @sqlParamOut out


print @sqlParamOut
insert ##TMP_CityResult (Id,CityConcatenation) values(@CurrentId,@sqlParamOut)
end


delete top (1) from ##TMP1
set @i = @i - 1
end
select tbl2.Id,tbl2.Time1,tbl2.Time2,TMP_EMP.NameAndFamil y,TMP_City.CityConcatenation from table2 as tbl2
left join ##TMP_EMPResult as TMP_EMP
on tbl2.Id = TMP_EMP.Id
left join ##TMP_CityResult as TMP_City
on tbl2.Id = TMP_City.Id




drop table ##TMP1
drop table ##TMP_EMPResult
drop table ##TMP_CityResult