View Full Version : ادغام چند مقدار
M.YasPro
چهارشنبه 07 مهر 1389, 19:21 عصر
سلام وقت به خیر
می خوام حاصل چند select رو با هم توی یه رکورد نمایش بدم . مثلا اگر پرس و جو های من اینا باشند :
select * from person where id=1
select max(field) from tbl1
select field1,field2 from tbl2
می خوام همه جواب من توی یک سطر نمایش داده بشه .
مثلا یک رکورد من بشه :
name, family , tell , max(field),field1,field2
ممنون از توجهتون
manij_mhm
پنج شنبه 08 مهر 1389, 14:21 عصر
سلام.
امکان پذیر که هست. من توی این مواقع از کرسر(CURSOR) استفاده می کنم. ولی نمی دونم روش استانداردتری برای این کار هست یا نه.
این طوری که شما خواستید تمام سطر ها دارای سه مقدار برابر در max(field),field1,field2 هستند. درسته؟!
M.YasPro
پنج شنبه 08 مهر 1389, 14:47 عصر
سلام
نه
منظورم از سه تا select ، سه تا جواب بدون ارتباط به هم هستند که می خوام توی یک سطر کنار هم قرار بگیرند . یهنی هر کدوم از select ها بشه یه فیلد توی رکورد
manij_mhm
پنج شنبه 08 مهر 1389, 15:09 عصر
create proc proc1 as
create table t (name nchar(30), family nchar(30), tell nchar(10) , max_field int,field1 nchar(30),field2 nchar(30))
declare @name nchar(30), @family nchar(30), @tell nchar(10) , @max_field int,@field1 nchar(30),@field2 nchar(30)
select @name= name,@family= family,@tell= tell from person where id=1
select @max_field= max(field) from tbl1
select @field1= field1,@field2= field2 from tbl2
insert into t (name, family, tell , max_field,field1 ,field2)
values (@name, @family, @tell , @max_field,@field1 ,@field2)
print '-------------------------'
select * from t
drop table t
بهزادصادقی
جمعه 09 مهر 1389, 21:27 عصر
اصلا امکان پذیر نیست ؟!!
امکان پذیر هست. ولی شما اطلاعات کافی ندادی.
if object_id( 'dbo.person' ) is not null begin
drop table dbo.person;
end;
if object_id( 'dbo.tbl1' ) is not null begin
drop table dbo.tbl1;
end;
if object_id( 'dbo.tbl2' ) is not null begin
drop table dbo.tbl2;
end;
create table dbo.person (id int identity(1,1) primary key, name nvarchar(10), family nvarchar(10) );
create table dbo.tbl1 (id int identity(1,1) primary key, field int);
create table dbo.tbl2 (id int identity(1,1) primary key, field1 int, field2 int);
insert dbo.person (name, family) values ('M', 'YasPro'), ('Behzad', 'Sadeghi' );
insert dbo.tbl1 (field) values (12), (2), (-4);
insert dbo.tbl2 (field1, field2) values (1,2), (2,3), (3,4), (-10,312), (0, 01);
with PersonSelect as
(
select * from person where id=1
), Tbl1Select as
(
select max(field) maxField from tbl1
), Tbl2Select as
(
select field1,field2 from tbl2
)
select
p.name,
p.family,
t1.maxField,
t2.field1,
t2.field2
from
PersonSelect p
cross join
Tbl1Select t1
cross join
Tbl2Select t2;
M.YasPro
شنبه 10 مهر 1389, 07:43 صبح
create proc proc1 as
create table t (name nchar(30), family nchar(30), tell nchar(10) , max_field int,field1 nchar(30),field2 nchar(30))
declare @name nchar(30), @family nchar(30), @tell nchar(10) , @max_field int,@field1 nchar(30),@field2 nchar(30)
select @name= name,@family= family,@tell= tell from person where id=1
select @max_field= max(field) from tbl1
select @field1= field1,@field2= field2 from tbl2
insert into t (name, family, tell , max_field,field1 ,field2)
values (@name, @family, @tell , @max_field,@field1 ,@field2)
print '-------------------------'
select * from t
drop table t
سلام
ممنون از جواب
این عمل ساختن و حذف کردن سرعت رو نمیاره پایین؟
M.YasPro
شنبه 10 مهر 1389, 07:49 صبح
امکان پذیر هست. ولی شما اطلاعات کافی ندادی.
if object_id( 'dbo.person' ) is not null begin
drop table dbo.person;
end;
if object_id( 'dbo.tbl1' ) is not null begin
drop table dbo.tbl1;
end;
if object_id( 'dbo.tbl2' ) is not null begin
drop table dbo.tbl2;
end;
create table dbo.person (id int identity(1,1) primary key, name nvarchar(10), family nvarchar(10) );
create table dbo.tbl1 (id int identity(1,1) primary key, field int);
create table dbo.tbl2 (id int identity(1,1) primary key, field1 int, field2 int);
insert dbo.person (name, family) values ('M', 'YasPro'), ('Behzad', 'Sadeghi' );
insert dbo.tbl1 (field) values (12), (2), (-4);
insert dbo.tbl2 (field1, field2) values (1,2), (2,3), (3,4), (-10,312), (0, 01);
with PersonSelect as
(
select * from person where id=1
), Tbl1Select as
(
select max(field) maxField from tbl1
), Tbl2Select as
(
select field1,field2 from tbl2
)
select
p.name,
p.family,
t1.maxField,
t2.field1,
t2.field2
from
PersonSelect p
cross join
Tbl1Select t1
cross join
Tbl2Select t2;
میشه کامنت هم بزارید روی این کد ها
بهزادصادقی
شنبه 10 مهر 1389, 08:11 صبح
میشه کامنت هم بزارید روی این کد ها
بستگی داره. لطفا اول شما بفرمائید که این کد همان کاری را که شما می خواهید انجام می دهد یا نه. اگر اشتباه است، چه نیازی به تفسیر دارد؟
M.YasPro
شنبه 10 مهر 1389, 08:27 صبح
ممنون از جوابت
خوب دوست عزیز مگه من نگفتم!
من میخوام چند تا select بی ربط به هم رو با هم توی یه Row نشون بدم .
select * from person where id=1
select max(field) from tbl1
select field1,field2 from tbl2
می خوام همه جواب من توی یک سطر نمایش داده بشه .
مثلا یک رکورد من بشه :
name, family , tell , max(field),field1,field2
یه سوال : چه جوری میشه با چند متغیر یه رکورد ساخت و اون رو توی یه استور return کرد
ممنون از توجهتون
devil00x
شنبه 10 مهر 1389, 08:51 صبح
cross join
و استفاده از آنها
M.YasPro
شنبه 10 مهر 1389, 08:56 صبح
الان sql ندارم که امتحان کنم ، اما به خاطر وجود join فکر نمی کنم چیزی که می خوام باشه .
چون من select های بی ارتباط با هم رو می خوام کنار هم توی یک سطر بزارم ولی join معرف ارتباط بین جدول هاست درسته ؟
بهزادصادقی
شنبه 10 مهر 1389, 09:17 صبح
الان sql ندارم که امتحان کنم ، اما به خاطر وجود join فکر نمی کنم چیزی که می خوام باشه .
چون من select های بی ارتباط با هم رو می خوام کنار هم توی یک سطر بزارم ولی join معرف ارتباط بین جدول هاست درسته ؟
نه.
هر وقت به SQL Server Management Studio دسترسی پیدا کردی، کل این کد را همان طور که هست اجرا کن. سه تا جدول را برایت درست می کند و بعد رویش یک select می زند. یک نگاهی هم به خود اون سه جدول بیانداز. بعد به من بگو این آن چیزی است که می خواستی یا نه. و اگر نه، با توجه به محتویات این سه جدول، نتیجه select ای که شما دنبالش هستی دقیقا چه باید باشد. منظورم این نیست که دوباره صورت مسئله خود را تکرار کنی. منظورم این است که سطرها و ستون هایی را که select مورد نظر شما باید بازگرداند (با توجه به محتویات این سه چدول آزمایشی) دقیقا برای من ترسیم کنی.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.