بطور عادی انتظار داریم که در فهرست کارها (به همراه فیلدهای قابل تعریف)، هر کار در یک سطر نمایش داده شود. اما در گردش کارهایی که از فیلدهای انتخابگر حرفی استفاده می کنند، در بعضی از موارد پدیده عجیبی اتفاق می افتد و آن این است که یک کار به شکل تکراری و در بیش از یک سطر مشاهده می شود. برای مثال به شکل زیر توجه کنید:
ملاحظه می کنید که در این فهرست، کار تعمیر یخچال دو بار تکرار شده است.
علت این پدیده
در این مثال بخصوص علت این پدیده این است که یکی از ستونهای فهرست کارها، فیلد انتخابگر حرفی "دستگاه" است و این فیلد داده ها را از طریق یک View به شکل زیر استخراج می کند و نمایش می دهد:
SELECT _Mats.mat_Code AS nwv_code, _Mats.mat_Name AS nwv_name, _Stocks.st_Name AS nwv_Category
FROM _Mats
INNER JOIN _MatStock ON _Mats.mat_Key =_MatStock.mst_MatKey
INNER JOIN _Stocks ON _MatStock.mst_StockKey = _Stocks.st_Key
حال به فهرست دادهای این انتخابگر حرفی توجه کنید:
ملاحظه می کنید که در این فهرست، برای یک کد کالای خاص (01/1/01050000) دو سطر نمایش داده می شود و علت آن این است که این کالا در دو انبار مرکزی و فومن موجود است. در حقیقت ساختار مالی این مرکز به شکلی است که کد کالا در تمام انبارها مشابه تعریف شده است. از طرف دیگر فهرست کارها(به همراه فیلدهای قابل تعریف) ، کارها را برمبنای کد دستگاه (nwv_Code) نمایش می دهد لذا این کار در فهرست تکرار می شود.
راه حل این مساله
راه حل این است که view را باید به شکلی بنویسیم که ستون کد انتخابگر حرفی (nwv_Code) به شکل یونیک استخراج شده و نمایش داده شود. بر این مبنا علت نمایش تکراری کار این است که محتوای کد انتخابگر حرفی یونیک نیست ولذا باید این بخش از view را به شکلی تغییر دهیم که محتوای یونیک تولید کند. در این مثال می توانیم کلید انبار را با یک کاراکتر ":" به انتهای کد دستگاه اضافه کنیم:
SELECT _Mats.mat_Code + ' :' + cast(_Stocks.st_Key AS nvarchar) AS nwv_code, _Mats.mat_Name AS nwv_name, _Stocks.st_Name AS nwv_Category
FROM _Mats
INNER JOIN _MatStock ON _Mats.mat_Key =_MatStock.mst_MatKey
INNER JOIN _Stocks ON _MatStock.mst_StockKey = _Stocks.st_Key
در این صورت نمایش فهرست داده در انتخابگر حرفی به شکل زیر تغییر می کند:
و به تبع آن، فهرست کارها نیز به شکل زیر تغییر می کند و کار تکراری حذف می شود: