PDA

View Full Version : دستور group by



tazekaram
شنبه 02 اردیبهشت 1391, 19:08 عصر
با سلام
يك جدول قرارداد داريم كه مي خوام تمام ستونهاش رو بر اساس شماره قرار داد (يكتا نيست) ليست كنم كه هر قرار داد چند صورت وضعيت داره و اين صورت وضعيتها هم براي هر قرارداد مرتب باشند.دستور گروپ باي هم كه مينويسم روي شماره قرارداد و شماره صورت وضعيت واسه بقيه فيلدها هم ميگه بايد از توابع تجمعي استفاده كنم.اما بقيه ستونهام هيچ شرطي ندارند
لطفا راهنماييم كنيد

baktash.n81@gmail.com
یک شنبه 03 اردیبهشت 1391, 08:14 صبح
سلام

طراحی جدولت چه جوریه ... ؟

hamid_kz
یک شنبه 03 اردیبهشت 1391, 16:26 عصر
اينجا هم بهترين گزينه Row_Number هست.. اگر لازم بود بگيد راهنمايي بيشتر كنم.. روي فيلد شماره قرارداد پارتيشن ايجاد كنيد و بر اساس صورت وضعيت Sort كنيد..

tazekaram
یک شنبه 03 اردیبهشت 1391, 21:49 عصر
ببينيد من يه پروسيجر دارم كه با پارامتر اطلاعات رو از دوتا جدول ميخونه و نمايش ميده

ALTER PROCEDURE [dbo].[GetPaymentDetails](@PayID INT)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
SELECT dbo.PaymentDesc.PayID, dbo.PaymentDesc.JobberID, dbo.PaymentDesc.StateNo, dbo.PaymentDesc.FinalTempore, dbo.PaymentDesc.TotalState,
dbo.PaymentDesc.BeforeState, dbo.PaymentDesc.NewState, dbo.PaymentDesc.PartialPayment, dbo.PaymentDesc.InsurancePrice,
dbo.PaymentDesc.TaskPercent, dbo.PaymentDesc.DecreasePrepaid, dbo.PaymentDesc.TotalPrepaid, dbo.PaymentDesc.DraftNo,
dbo.PaymentDesc.DraftDate, dbo.PaymentDesc.DeraftPrice, dbo.PaymentDesc.DeSum, dbo.PaymentDesc.Payment, dbo.PaymentDesc.Planner,
dbo.PaymentDesc.Reciever, dbo.PaymentDesc.PayType, dbo.PaymentDesc.PayTax, dbo.Identities.ProjectName, dbo.Identities.DesignName,
dbo.Identities.JobberName, dbo.Identities.FirstTime, dbo.Identities.FirstPrice, dbo.PaymentDesc.GhID,dbo.Identities.GhNumber
FROM dbo.PaymentDesc INNER JOIN
dbo.Identities ON dbo.PaymentDesc.GhID = dbo.Identities.GhID
where PayID=@PayID
END


جداول هم خيلي ضعيف طراحي شدن و من دارم رو همون قديميا كار ميكنم و امكان دستكاري ديتا بيس رو هم ندارم.dbo.PaymentDesc.StateNo هم فيلد شماره وضعيت هست و dbo.Identities.GhNumber هم فيلد شماره قرارداد
منظورتون از Row_Number و پارتيشن چيست؟ميشه بيشتر توضيح بديد لطفا

tazekaram
یک شنبه 03 اردیبهشت 1391, 21:55 عصر
در ضمن ديتابيس هم SQL2000 هست

hamid_kz
شنبه 09 اردیبهشت 1391, 11:17 صبح
كد را به اين شكل تغيير دهيد:

ALTER PROCEDURE [dbo].[GetPaymentDetails](@PayID INT)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
SELECT ROW_NUMBER() OVER(PARTITION BY dbo.Identities.GhNumber ORDER BY dbo.PaymentDesc.StateNo),
dbo.PaymentDesc.PayID, dbo.PaymentDesc.JobberID, dbo.PaymentDesc.StateNo, dbo.PaymentDesc.FinalTempore, dbo.PaymentDesc.TotalState,
dbo.PaymentDesc.BeforeState, dbo.PaymentDesc.NewState, dbo.PaymentDesc.PartialPayment, dbo.PaymentDesc.InsurancePrice,
dbo.PaymentDesc.TaskPercent, dbo.PaymentDesc.DecreasePrepaid, dbo.PaymentDesc.TotalPrepaid, dbo.PaymentDesc.DraftNo,
dbo.PaymentDesc.DraftDate, dbo.PaymentDesc.DeraftPrice, dbo.PaymentDesc.DeSum, dbo.PaymentDesc.Payment, dbo.PaymentDesc.Planner,
dbo.PaymentDesc.Reciever, dbo.PaymentDesc.PayType, dbo.PaymentDesc.PayTax, dbo.Identities.ProjectName, dbo.Identities.DesignName,
dbo.Identities.JobberName, dbo.Identities.FirstTime, dbo.Identities.FirstPrice, dbo.PaymentDesc.GhID,dbo.Identities.GhNumber
FROM dbo.PaymentDesc INNER JOIN
dbo.Identities ON dbo.PaymentDesc.GhID = dbo.Identities.GhID
where PayID=@PayID
END