PDA

View Full Version : گفتگو: مشکل در تبدیل سطر یه ستون و ساختار DB



mahdi_negahi
شنبه 21 اردیبهشت 1387, 10:16 صبح
سلام دوستان ، اول بگم من سرچ کردم بعد تاپیک گذاشتم


من ساختار db به این گونه است :
Goods : کالا
Attribute : مشخصات کالا
AttributeValue : مقادیر مشخصات
AttributeGoods : ارتباط کالا با هر مقدار مشخصه

http://i29.tinypic.com/121ddup.jpg

و این هم مقادیر

http://i31.tinypic.com/1zw2hpj.jpg

حال سوال های من:

من می خواهم مقادیر جدول Attribute به عنوان ستون Goods باشد و AttributeValue هم مقدار سطر آن باشد
من Pivot بررسی کردم ولی این دستور یک تابع Aggreation میخواهد که مقادیر AttributeValue من از نوع کاراکتر است

در جایی هم دیدم که یک Sp به نام CrossTab نوشته که باز هم Agrreation میخواهد ولی خودم با Distinct آن را پیاده سازی کردم ولی چون حاصل Join من چند سطر میشود این Query دوسطر میدهد
در زیر Query خودم مینویسم توجه کنید که این Query ساخته میشود و من نتیجه گذاشتم:

SELECT DISTINCT Goods.ID,[Column],Code,Serial ,
(CASE AttributeName WHEN 'Buss' THEN [Value] END) as 'Buss',(CASE AttributeName WHEN 'Cash' THEN [Value] END) as 'Cash', (CASE AttributeName WHEN 'Speed' THEN [Value] END) as 'Speed' FROM Goods INNER JOIN dbo.AttributeGoods ON GoodsRef = Goods.ID INNER JOIN AttributeValue ON AttValueRef = AttributeValue.ID INNER JOIN Attribute ON AttributeRef = Attribute.ID GROUP BY Goods.ID,[Column],Code,Serial,AttributeName,[Value]

AminSobati
شنبه 21 اردیبهشت 1387, 16:31 عصر
دوست عزیزم از همون PIVOT استفاده کنین و برای Aggregate میتونین از MIN یا MAX استفاده کنید که نهایتا همون value رو بهتون برمیگردونه.

mahdi_negahi
شنبه 21 اردیبهشت 1387, 22:10 عصر
استاد ثابتی من در PIVOT بسیار مشکل دارم میشه راهنمایی کنید.

AminSobati
شنبه 21 اردیبهشت 1387, 22:30 عصر
خوب بفرمایید مشکل کجاست

mahdi_negahi
یک شنبه 22 اردیبهشت 1387, 00:06 صبح
استاد من نوشتم ولی راستشو بگم چند مثال دیدم و نوشتم ، فلسفه این دستور را نمیفهمم، اگر میشه توضیح بدهد
در زیر Query مینویسم :



SELECT * FROM
(
SELECT Goods.*,AttributeName,[Value] FROM Goods
INNER JOIN AttributeGoods On Goods.ID = AttributeGoods.GoodsRef
INNER JOIN AttributeValue ON AttValueRef = AttributeValue.ID
INNER JOIN Attribute ON AttributeRef = Attribute.ID
)AS P
PIVOT
(
MAX([Value])
FOR AttributeName IN
(
[Cash],
[Speed]
)

)As pvt

AminSobati
دوشنبه 23 اردیبهشت 1387, 15:10 عصر
خیلی سادست، مقادیری که بعد از IN ظاهر میشن، یعنی Cash و Speed قرار فیلدهای شما بشن. روی Cash و Speed میشه گفت انگار Group By انجام میشه و Max Value در هر گروه بدست میاد