PDA

View Full Version : کوئری گرفتن از این جدول



seniamail
پنج شنبه 04 آذر 1389, 16:22 عصر
سلام چطور میتونم از جدول اول کوئری بگیرم تا جدول دوم حاصل بشه

baran_mehr
شنبه 06 آذر 1389, 14:11 عصر
سلام
منظورتون دقیقا چیه؟
اگر میخواین یک دستور select بر روی جدولی بنویسید و نتیجه رو در یک جدول جدید بریزید که قبلا ساختید که دستور insert into select جواب میده و اگر میخواین یک جدول هم براش ساخته بشه خوب میتونید قبل از insert کردن با دستور create table یک جدول ایجاد کنید و بعد insert کنید

Reza_Yarahmadi
شنبه 06 آذر 1389, 15:15 عصر
ميتونيد بصورت زير عمل كنيد.
CREATE TABLE #Temp(
[Name] [nvarchar](500) COLLATE Arabic_CI_AS NULL,
[From] [varchar](500) NULL,
[To] [varchar](500) NULL,
[I1] [bit] NULL
)
Declare @Name nvarchar(max),
@OldName nvarchar(max),
@From varchar(50),
@To varchar(50),
@I1 bit,
@OldI1 bit,
@date SmallDateTime,
@Firstdate SmallDateTime,
@Lastdate SmallDateTime

Declare src Cursor For
Select
Name,
Cast(Date_Time as SmallDateTime),
I1
from
tbl

Open src
Fetch Next From src Into @name,
@Date,
@I1
Set @OldName = @Name
Set @Firstdate = @date
Set @OldI1 = @I1
While (@@Fetch_Status = 0)
Begin
if(@OldI1 <> @I1) OR (@OldName <> @Name)
Begin
Insert Into #Temp Values(@OldName,
SubString(Cast(@Firstdate as varchar), 12, 12),
SubString(Cast(@Lastdate as varchar), 12, 12),
@OldI1)
Set @OldName = @Name
Set @Firstdate = @date
Set @Lastdate = @date
Set @OldI1 = @I1
End
else
Set @Lastdate = @date
Fetch Next From src Into @name,
@Date,
@I1
End
Insert Into #Temp Values(@OldName,
SubString(Cast(@Firstdate as varchar), 12, 12),
SubString(Cast(@Lastdate as varchar), 12, 12),
@OldI1)
Close src
Deallocate src
Select
Name as [نام ],
[From] as [از ساعت],
[To] as [تا ساعت],
I1 as [وضعيت]
From
#Temp
Drop Table #Temp

seniamail
شنبه 06 آذر 1389, 22:11 عصر
سلام
منظورتون دقیقا چیه؟
اگر میخواین یک دستور select بر روی جدولی بنویسید و نتیجه رو در یک جدول جدید بریزید که قبلا ساختید که دستور insert into select جواب میده و اگر میخواین یک جدول هم براش ساخته بشه خوب میتونید قبل از insert کردن با دستور create table یک جدول ایجاد کنید و بعد insert کنید

فقط میخوام نحوه select کردن رو بدونم. با insert کردن مشکلی ندارم. کوئری که حاصلش جدول دوم باشه

baran_mehr
شنبه 06 آذر 1389, 22:47 عصر
البته با اجازه دوستمون Reza_Yarahmadi جان
میخوای از تو جدولت با چه شرطی رکوردها رو واکشی کنی؟
بگو تا توی نوشتن کوئریش کمکت کنیم

seniamail
یک شنبه 07 آذر 1389, 07:52 صبح
اگر به عکسها نگاه کنید خودتان متوجه خواهید شد. میخوام که کوئری نشون بده که از چه ساعت تا چه ساعتی نام Ali چه وضعیتی رو داشته (1 بوده یا 0)
کوئری آقای یاراحمدی جواب داده و من از ایشون تشکر میکنم فقط یه ایراد کوچیک داره که قابل توضیح نیست. فقط عکس رو اینجا میزارم تا از طریق عکسها مشخص بشه. عکس اول جدول اصلی عکس دوم چیزی که من میخوام و عکس سوم کوئری آقای یاراحمدی
ممنون میشم اگه آقای یاراحمدی یه توضیح کوچیک در مورد کد بدهند تا خودم اون رو به همون شکل اصلاح کنم

Reza_Yarahmadi
یک شنبه 07 آذر 1389, 08:09 صبح
من فكر كردم مقدار اولين زمان در يك حالت و مقدار آخرين زمان در همون حالت رو ميخوايد.
چون مقدار هر سطربا توجه به سطر قبل محاسبه ميشه (مقدارهاي I1 با هم مقايسه ميشن) مجبوريد از كرسر استفاده كنيد. هر بار يك سطر خونده ميشه و توي يك سري متغير ريخته ميشه ، اين مقدارها با مقدار هاي قبلي مقايسه ميشه در صورت تغيير كردن (Name و يا I1) اولين زمان و زمان ركورد خونده شده و همچنين نام و I1 توي يك جدول كمكي ذخيره ميشه. در نهايت محتويات جدول كمكي نمايش و جدول حذف ميشه.
CREATE TABLE #Temp(
[Name] [nvarchar](500) COLLATE Arabic_CI_AS NULL,
[From] [varchar](500) NULL,
[To] [varchar](500) NULL,
[I1] [bit] NULL
)
Declare @Name nvarchar(max),
@OldName nvarchar(max),
@From varchar(50),
@To varchar(50),
@I1 bit,
@OldI1 bit,
@date SmallDateTime,
@Firstdate SmallDateTime

Declare src Cursor For
Select
Name,
Cast(Date_Time as SmallDateTime),
I1
from
tbl

Open src
Fetch Next From src Into @name,
@Date,
@I1
Set @OldName = @Name
Set @Firstdate = @date
Set @OldI1 = @I1
While (@@Fetch_Status = 0)
Begin
if(@OldI1 <> @I1) OR (@OldName <> @Name)
Begin
Insert Into #Temp Values(@OldName,
SubString(Cast(@Firstdate as varchar), 12, 12),
SubString(Cast(@date as varchar), 12, 12),
@OldI1)
Set @OldName = @Name
Set @Firstdate = @date
Set @OldI1 = @I1
End
Fetch Next From src Into @name,
@Date,
@I1
End
Insert Into #Temp Values(@OldName,
SubString(Cast(@Firstdate as varchar), 12, 12),
SubString(Cast(@date as varchar), 12, 12),
@OldI1)
Close src
Deallocate src
Select
Name as [نام ],
[From] as [از ساعت],
[To] as [تا ساعت],
I1 as [وضعيت]
From
#Temp
Drop Table #Temp