ورود

View Full Version : سوال: pivot



niloofar norouzi
پنج شنبه 28 شهریور 1387, 11:53 صبح
سلام

.Post و دیگری Personal من 2 تا جدول دارم یکی

می خوام یه Query بنویسم که نام هر ستون شماره ی پرسنلی(از جدول پرسنل) فرد باشه و سطر ها نام پست های شخص (از جدول پست)

pivotچطور می تونم با استفاده از این query را بنویسم؟

با تشکر

AminSobati
پنج شنبه 28 شهریور 1387, 18:39 عصر
سلام،
ظاهرا شما به Dynamic Pivot احتیاج دارین:
http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables

Milad Mohseny
پنج شنبه 11 مهر 1387, 12:57 عصر
سلام،
ظاهرا شما به Dynamic Pivot احتیاج دارین:
http://www.sqlteam.com/article/dynam...s-pivot-tables
با سلام خدمت دوستان عزیز.
کسی SP موجود در لینک بالا رو تست کرده ؟
من رو 2008 تست کردم موقع exec شدن از PIVOT## خطا میگیره.

AminSobati
پنج شنبه 11 مهر 1387, 23:55 عصر
CREATE PROCEDURE crosstab
@select varchar(8000),
@sumfunc varchar(100),
@pivot varchar(100),
@table varchar(100)
AS

DECLARE @sql varchar(8000), @delim varchar(1)
SET NOCOUNT ON
SET ANSI_WARNINGS OFF

EXEC ('SELECT ' + @pivot + ' AS [pivot] INTO ##pivot FROM ' + @table + ' WHERE 1=2')
EXEC ('INSERT INTO ##pivot SELECT DISTINCT ' + @pivot + ' FROM ' + @table + ' WHERE '
+ @pivot + ' Is Not Null')

SELECT @sql='', @sumfunc=stuff(@sumfunc, len(@sumfunc), 1, ' END)' )

SELECT @delim=CASE Sign( CharIndex('char', data_type)+CharIndex('date', data_type) )
WHEN 0 THEN '' ELSE '''' END
FROM tempdb.information_schema.columns
WHERE table_name='##pivot' AND column_name='pivot'

SELECT @sql=@sql + '''' + convert(varchar(100), [pivot]) + ''' = ' +
stuff(@sumfunc,charindex( '(', @sumfunc )+1, 0, ' CASE ' + @pivot + ' WHEN '
+ @delim + convert(varchar(100), [pivot]) + @delim + ' THEN ' ) + ', ' FROM ##pivot

DROP TABLE ##pivot

SELECT @sql=left(@sql, len(@sql)-1)
SELECT @select=stuff(@select, charindex(' FROM ', @select)+1, 0, ', ' + @sql + ' ')

EXEC (@select)
SET ANSI_WARNINGS ON

Milad Mohseny
جمعه 12 مهر 1387, 00:20 صبح
ممنون درست شد.
من هم مشکل niloofar norouzi رو دارم ولی من از چند جدول با رکورد های متغییر میخواهم Select کنم.
مثلا جداول: مریض، شغل، بیماری، دارو و ....
که هر مریض ممکن است تعداد متفاوتی کار، بیماری و دارو داشته باشد
و میخواهم Select به شکل زیر داشته باشم
نام----------نام خانوادگی---------کارگر-----میوه فروش-------بقال-----سرماخوردگی--------سردرد-------گلودرد
علی------------علیان---------------0-------------1---------------1--------------1--------------------0--------------1
حسن----------حسنی-------------1-------------0--------------0---------------0--------------------1--------------1
...
کسی نظری داره؟
من به این نتیجه رسیدم که خودم کد نویسی کنم یعنی همه رو تو DataTable لود کنم و بعد با کد نویسی ترکیب کنم و در نهایت در یک DataGrid نمایش بدم. راه بهتری هست؟
ابزار های گزارش سازی هم با فیلد های ثابت سرو کار دارند.
(چون مشکلم شبیه به دوستمون بود گفتم مشکلم رو تو همین تاپیک مطرح کنم).
ممنون