PDA

View Full Version : نیاز به یک sql پیچیده



hmm
چهارشنبه 20 آبان 1383, 12:06 عصر
با سلام
من یک جدول دارم بصورت زیر



تعداد نوع محصول کد تهیه کننده
100 1 1
100 2 30
100 4 7
200 1 8
200 3 60



فرض کنید که نوع محصول عددی بین 1 تا 4 است

حال میخواهم خروجی پرس و جو بصورت زیر باشد



ت.ن.م 4 ت.ن.م3 ت.ن.م2 ت.ن.م 1 کد تهیه کننده
100 1 30 0 7
200 8 0 60 0


ت.ن.م = تعداد نوع محصول

میدانم که از طریق برنامه نویسی میشود(فعلا اینطوری کار می کنم) ولی آیا راه حلی برای این موضوع از روش sql هم وجود دارد
ممنون

Sepidar
چهارشنبه 20 آبان 1383, 14:33 عصر
TRANSFORM Sum(Table1.quentity) AS SumOfquentity
SELECT Table1.producer
FROM Table1
GROUP BY Table1.producer
PIVOT Table1.product;

AminSobati
چهارشنبه 20 آبان 1383, 16:25 عصر
و بدون امکانات Analysis Services با فرض اینکه این جدول رو دارید:


CREATE TABLE MyTable (
SupID int, -- Tahie konande
ProdID int, -- cod e mahsool
Qty int) -- tedad
میشه نوشت:

SELECT SupID,
(SELECT Qty FROM MyTable WHERE SupID=tmp.SupID AND ProdID=1) AS 'TNM 1',
(SELECT Qty FROM MyTable WHERE SupID=tmp.SupID AND ProdID=2) AS 'TNM 2',
(SELECT Qty FROM MyTable WHERE SupID=tmp.SupID AND ProdID=3) AS 'TNM 3',
(SELECT Qty FROM MyTable WHERE SupID=tmp.SupID AND ProdID=4) AS 'TNM 4'
FROM (SELECT DISTINCT SupID FROM MyTable) AS tmp
برای قرار دادن صفر به جای NULL هم از CASE میتونین استفاده کنین.

hmm
شنبه 23 آبان 1383, 08:50 صبح
میشه در مورد دستور TRANSFORM کمی توضیح بدین
آقای نصیری ممنون ولی این روش برای یک جدول جواب میده ولی اگه دو جدول بخوان join بشن چطوری رکورد نظیرش رو میشه پیدا کرد؟

MiRHaDi
شنبه 23 آبان 1383, 09:03 صبح
سلام
فکر میکنم توی Query آقای AminSobati عزیز باید بجای Select Oty از Select Sum(Oty) استفاده کنیم
البته اگه اشتباه نکنم
بای

AminSobati
شنبه 23 آبان 1383, 15:38 عصر
اگر کد تهیه کننده ثابت با کد محصول ثابت تکرار بشه، من حق رو به میرهادی جان میدم!

hmm
دوشنبه 25 آبان 1383, 07:27 صبح
میشه در مورد دستور TRANSFORM کمی توضیح بدین
:cry: :گیج:

AminSobati
دوشنبه 25 آبان 1383, 14:00 عصر
http://www.devguru.com/Technologies/jetsql/quickref/transform.html

MiRHaDi
سه شنبه 26 آبان 1383, 23:56 عصر
سلام
فکر میکنم برای اون باید از GroupBy استفاده کنیم که مشکلی نباشه ! نه ؟
بای

AminSobati
چهارشنبه 27 آبان 1383, 00:06 صبح
سلام،
اگر از sum استفاده کنیم، چون بر اساس IDهای یکسان باید انجام بشه، Group By هم نیازه
موفق باشین