PDA

View Full Version : سوال: جمع آوری واحد های کالا



rasti_web
یک شنبه 02 خرداد 1389, 10:51 صبح
با سلام
من سه جدول به نامهای کالا و واحد و واحدهای کالا دارم .
میخوام نتیجه query من واحدهای هر کالا را به این صورت نمایش دهد :
قرمز 16 عددی ( عدد ، کارتن ، بسته)
گلدار قرمز ( عدد ، کارتن )
تصویر جداوی و query و نتیجه در ضمیمه آمده است .
چطور query فوق را بنویسم ؟

محمد سلیم آبادی
یک شنبه 02 خرداد 1389, 11:23 صبح
سلام،
از چه نسخه ای استفاده می کنید؟ 2005 ؟

rasti_web
یک شنبه 02 خرداد 1389, 11:36 صبح
نه از sqlserver 2000

محمد سلیم آبادی
یک شنبه 02 خرداد 1389, 11:47 صبح
SELECT products,
MAX(CASE WHEN rec_id = 1 THEN units ELSE '' END) +
MAX(CASE WHEN rec_id = 2 THEN ','+units ELSE '' END)+
MAX(CASE WEHEN rec_id = 3 THEN ','+units ELSE '' END) AS List
FROM
(SELECT *, (SELECT COUNT(*)
FROM table_name
WHERE products = T.products
AND units <= T.units) AS rec_id
FROM table_name AS T)
GROUP BY products

محمد سلیم آبادی
یک شنبه 02 خرداد 1389, 12:17 عصر
این یکی که کامل هست را امتحان کنید:


SELECT P.Name,
List
FROM Products AS P
INNER JOIN
(SELECT productID,
MAX(CASE WHEN rec_id = 1 THEN Name ELSE '' END)+
MAX(CASE WHEN rec_id = 2 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 3 THEN ','+Name ELSE '' END) AS list
FROM
(SELECT P.product_id, U.Name, (SELECT COUNT(*)
FROM productsUnits P1
INNER JOIN Units U1
ON p1.unitID = U1.unitID
AND U1.Name <= U.Name
AND P1.product_id = P.product_id) AS rec_id
FROM productsUnits AS P
INNER JOIN Units U
ON P.unitID = U.unitID) AS D
GROUP BY productID) AS Dt
ON Dt.product_id = P.product_id;


با مطالعه این مقاله می توانید با انواع روشهای حل این گونه مسائل آشنا شوین:
http://www.30sharp.com/ShowArticle.aspx?nid=13&did=214&AuthorID=11

rasti_web
شنبه 08 خرداد 1389, 13:33 عصر
اگر تعداد واحدهای کالا بیش از سه تا باشند چه ؟ این کد فقط نام سه تا از واحد های کالا را میدهد در صورتی که من میخواهم نام تمام واحد های کالا را بدهد . چه طوری میشه این کار رو کرد ؟
ضمنا در جدول ProductsUnits فیلدی به نام Priority برای اولویت کالا وجود دارد و من میخواهم لیست واحدهای کالا بر حسب این اولویت Sort شده باشند . از راهنمایتون ممنونم میشم .

محمد سلیم آبادی
دوشنبه 10 خرداد 1389, 13:37 عصر
29 آیتم کافیه یا نه؟


SELECT P.Name,
List
FROM Products AS P
INNER JOIN
(SELECT productID,
MAX(CASE WHEN rec_id = 1 THEN Name ELSE '' END)+
MAX(CASE WHEN rec_id = 2 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 3 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 4 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 5 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 6 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 7 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 8 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 9 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 10 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 11 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 12 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 13 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 14 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 15 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 16 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 17 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 18 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 19 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 20 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 21 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 22 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 23 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 24 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 25 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 26 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 27 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 28 THEN ','+Name ELSE '' END)+
MAX(CASE WHEN rec_id = 29 THEN ','+Name ELSE '' END) AS list
FROM
(SELECT P.product_id, U.Name, (SELECT COUNT(*)
FROM productsUnits P1
INNER JOIN Units U1
ON p1.unitID = U1.unitID
AND CAST(Priority AS VARCHAR(10)) + U1.Name <= CAST(P.Priority AS VARCHAR(10)) + U.Name
AND P1.product_id = P.product_id) AS rec_id
FROM productsUnits AS P
INNER JOIN Units U
ON P.unitID = U.unitID) AS D
GROUP BY productID) AS Dt
ON Dt.product_id = P.product_id;