PDA

View Full Version : نوشتن Query



sknsphr
یک شنبه 10 شهریور 1387, 10:28 صبح
سلام

من یه جدول دارم: به ترتیب فیلدهای "شماره مدرک-شماره صفحه-اندیس صفحه-وضعیت" وضعیت میتونه جاری باشه یا نباشه.(SQL Server 2005)

CREATE TABLE [dbo].[tblP](
[I_NO_Plan] [varchar](20) COLLATE SQL_Latin1_General_CP1256_CI_AS NOT NULL,
[I_PAGE_NO] [varchar](20) COLLATE SQL_Latin1_General_CP1256_CI_AS NOT NULL CONSTRAINT [DF_tblGenPageIndex_I_PAGE_NO] DEFAULT (''),
[I_ANDIX] [varchar](20) COLLATE SQL_Latin1_General_CP1256_CI_AS NOT NULL CONSTRAINT [DF_tblGenPageIndex_I_ANDIX] DEFAULT (''),
[I_Status_CODE] [tinyint] NOT NULL CONSTRAINT [DF_tblPlanPageIndex_Status] DEFAULT ((2))
(
[I_NO_Plan] ASC,
[I_PAGE_NO] ASC,
[I_ANDIX] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

حالا میخوام یه view داشته باشم که: برای هر شماره مدرک یه رکورد باشه به همراه:
کوچکترین شماره صفحه ای که وضعیت جاری دارد. اگر هیچ صفحه ای از یک شماره مدرک وضعیت جاری ندارد، صرفا کوچکترین شماره صفحه.

خودم اینو نوشتم:

SELECT Q1.I_NO_Plan, ISNULL(Q2.MinCurPage, Q1.MinPage) AS I_PAGE_NO
FROM (SELECT I_NO_Plan, MIN(I_PAGE_NO) AS MinPage
FROM dbo.tblP
GROUP BY I_NO_Plan) AS Q1 LEFT OUTER JOIN
(SELECT I_NO_Plan, MIN(I_PAGE_NO) AS MinCurPage
FROM dbo.tblP
WHERE (I_Status_CODE = 2)
GROUP BY I_NO_Plan) AS Q2 ON Q1.I_NO_Plan = Q2.I_NO_Plan

روش بهتری هست؟ ممنون

محمد سلیم آبادی
جمعه 27 آذر 1388, 23:37 عصر
سلام دوست عزیز،
بله روش بهتری نیز وجود دارد!



select I_NO_Plan,
I_PAGE_NO=Isnull(Min(case when I_Status_CODE = 2 then I_PAGE_NO end), Min(I_PAGE_NO))
from @t as tbIP
group by I_NO_Plan