ورود

View Full Version : گزارش ترکیبی در sql



rasul58
جمعه 08 اردیبهشت 1385, 19:15 عصر
با سلام - لطفا کمک کنید
جدولی داریم بنام جدول شاخص با سه فیلد زیر:
نام کالا – نام مجموعه – تاریخ

حاوی رکوردهای زیر :
کالای شماره یک – مجموعه شماره یک – 85/01/01
کالای شماره یک – مجموعه شماره دو – 95/01/01

جدول دیگری داریم بنام جدول روزانه با 3 فیلد زیر:
نام کالا – تاریخ استفاده – میزان استفاده در روز (برحسب ساعت)

حاوی اطلاعات زیر :
کالای شماره یک – 86/01/01 – 5
کالای شماره یک – 96/01/01 – 8

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

حال می خواهیم گزارشی ترکیبی از دو جدول تهیه کنیم مانند رکورد زیر :

نام کالا – تاریخ – نام مجموعه استفاده کننده - میزان استفاده در روز (برحسب ساعت)
خروجی باید شامل رکوردهای زیر باشد :
کالای شماره یک – 86/01/01 - مجموعه شماره یک - 5
کالای شماره یک – 96/01/01 - مجموعه شماره دو - 8



این گزارش را می خواهیم از تاریخ 86/01/01 تا 97/01/01 بدست آوریم .
خروجی باید حاوی رکوردهایی باشد به این صورت که :
در این خروجی کالای شماره یک که بعد از سال 85 و قبل از سال 95 وارد جدول شده باید نام مجموعه اش را مجموعه شماره یک نشان دهد (مطابق اطلاعات موجود در جداول که در بالا محتوای آنها ذکر شد) و کالای شماره یک که بعد از سال 95 وارد جدول شده باید نام مجموعه اش را مجموعه شماره دو نشان دهد .

کد sql آن را چگونه بنویسیم ؟
کد زیر را نوشته ام ولی صحیح نیست .

SELECT shakhes.tarikh as tarikh_ shakhes, shakhes.name_kala ,
shakhes .name_majmue ,
Ruzane.name_kala , ruzane.tarikh as tarikh_ruzane , ruzane.saat_estefade

FROM shakhes , Ruzane
WHERE Ruzane. name_kala = shakhes.name_kala
AND ruzane.tarikh between tarikh1 and tarikh2
AND shakhes.tarikh between tarikh1 and tarikh2

می دانم خط آخر اشتباه است ولی چگونه باید آن را نوشت ؟

Kamyar.Kimiyabeigi
شنبه 09 اردیبهشت 1385, 09:12 صبح
امیدوارم کد زیر کمکتون کنه


SELECT s.name_kala, r.tarikh, s.name_majmue, r.saat_estefade
FROM shakhes s INNER JOIN Ruzane r ON s.name_kala = r.name_kala

Inspiration
شنبه 09 اردیبهشت 1385, 10:39 صبح
دستورات ربوط به ساختار جداول:


CREATE TABLE [dbo].[tblShakhes] (
[GoodNo] [int] NULL ,
[SetNo] [char] (10) COLLATE SQL_Latin1_General_CP1256_CI_AS NULL ,
[DefineDate] [char] (10) COLLATE SQL_Latin1_General_CP1256_CI_AS NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[tblUsage] (
[GoodNo] [int] NULL ,
[UsageDate] [char] (10) COLLATE SQL_Latin1_General_CP1256_CI_AS NULL ,
[UsageCount] [tinyint] NULL
) ON [PRIMARY]
GO


و دستورات مربوط به گزارش :


SELECT tblShakhes.GoodNo ,
MIN(DefineDate ) as mDefineDate
INTO ##tmp
FROM tblShakhes,tblUsage
WHERE tblShakhes.GoodNo=TblUsage.GoodNo
AND DefineDate<=tblUsage.UsageDate
AND DefineDate BETWEEN '86/01/01' AND'97/01/01'
GROUP BY tblShakhes.GoodNo

SELECT ##tmp.GoodNo,
tblshakhes.SetNo,
UsageDate,
UsageCount
FROM ##tmp,tblUsage,tblshakhes
WHERE ##tmp.GoodNo=tblshakhes.GoodNo
AND tblshakhes.GoodNo=TblUsage.GoodNo
AND tblshakhes.DefineDate=##tmp.mDefineDate