PDA

View Full Version : ایجاد یک فیلد در View بر اساس ردیف های قبلی



masoode
سه شنبه 16 بهمن 1397, 17:13 عصر
سلام
این جدول را داریم
CREATE TABLE [dbo].[tbl1](
[BarcodeId] [int] NULL,
[DT] [datetime] NULL,
[QCResult] [bit] NULL,
) ON [PRIMARY]

149748
این اطلاعات کنترل کیفیت یک محصول است. ستون اول آی دی بارکد است (بارکدها در جدول دیگری ذخیره میشود)، ستون تاریخ و ساعت تولید و ستون آخر نتیجه کنترل کیفیت است که True بودن آن یعنی کیفیت این محصول تایید است.
در تعاریف سازمان به طور مثال 5 محصول اولی که OK نشود مجاز است و بقیه غیر مجاز.
به دلایلی در زمان اینسرت کردن امکان مشخص کردن مجاز/غیر مجاز وجود ندارد و باید موقع گزارش گیری آن را تعیین کرد.
من باید یک ویو درست کنم که یک چنین نتیجه ای برای من ایجاد کند:
149749
لطفاً برای نوشتن کوئری مورد نظر راهنمایی ام کنید.
این جدول ساده شده جدول اصلی برنامه است. اگر لازم است بفرمایید تا بک آپ دیتابیس ساده شده را آپ لود کنم

masoode
چهارشنبه 17 بهمن 1397, 09:02 صبح
کوئری زیر مشکل داره اما یک همچین چیزی میخوام:
SELECT TOP 1000 [BarcodeId]
,[DT]
,[QCResult]
,[Valid]
,LAG(vv,1,0) OVER (ORDER BY dt)+1 AS vv
FROM [MyTestDB].[dbo].[tbl1]

masoode
چهارشنبه 17 بهمن 1397, 10:00 صبح
این را نوشتم و کارم را راه انداخت اما احساس می کنم خیلی بهینه نیست. البته تعداد رکورد های این جدول خیلی زیاد نیست و حداکثر 10.0000 ردیف خواهد شد.
select BarcodeId,DT,QCResult,(
SELECT isnull(sum(case when QCResult=1 then 0 else 1 end),0)
FROM tbl1 a
WHERE a.dt<b.dt
) cnt
FROM tbl1 b