سلام دوستان من یک جدول دارم به شکل زیر
MK.jpg
حال می خواهم از فیلد Name بعنوان عناوین ستون ها و فیلد Value مقادیر ستون ها باش از صبح کلافه ام کرده اگر دوستان راهنمائی بکنند ممنون میشوم
سلام دوستان من یک جدول دارم به شکل زیر
MK.jpg
حال می خواهم از فیلد Name بعنوان عناوین ستون ها و فیلد Value مقادیر ستون ها باش از صبح کلافه ام کرده اگر دوستان راهنمائی بکنند ممنون میشوم
کوئری خودتون چیه؟ خطا؟
و چرا ساختار جدول به اینصورت هست؟
SELECT prnt, [34] AS cesr, [1] AS lnam, [2] AS fnam, [4] AS dtav, [25] AS adrs
FROM (SELECT Name,Value,NameCode,prnt FROM TestP) p
PIVOT
( COUNT (name)
FOR NameCode IN( [34], [1], [2], [4], [25] )
) AS pvt
یه برنامه نویس و یه شرکت حرفه (ارایورز) این برنامه را نوشته به ازای هر فرد 35 رکورد ذخیره میشه
تصویر زیر اطلاعات یک نفر است
111.jpg
آخه چنین ساختاری وقتی استفاده میشه که خصوصیات(نام، نام خانوادگی،...) تعداد مشخصی نداشته باشند مثلا برای ذخیره اجناس با ویژگی های متفاوت. در ثانی اشتباه دیگر برنامه نویس این برنامه این بوده که سطرهایی که value اونها null بوده اصلا نیاز به ذخیره سازی نداشته اند. و سوم اینکه ستون Name کلا اضافه هست(حجم زیادی فقط برای مقادیر تکراری این ستون هدر میره) و میتونست در یک جدول دیگر باشه و با ستون namecode جوین بشه.
اما در مورد کوئری، لینک زیر دقیقا مشابه سوال شما رو جواب دادم. منتها در اون کد یک rownumber اضافه کردم که برای شما نیاز نیست و به جاش از namecode استفاده کنید.
https://barnamenevis.org/showthread.p...=1#post2348571
سلام با تشکر از اینکه زحمت کشیدید راهنمائی کردید من مطابق شکل راهنمائی های شما انجام دادم
select namecode,
max([34]) ,
max([1]) ,
max([2]) ,
max([4]) ,
max([25]))
from
( select namecode, [34] AS cesr, [1] AS lnam, [2] AS fnam, [4] AS dtav, [25] AS adrs
from testp
pivot ( max(pk_id)
for namecode in([34], [1], [2], [4], [25])
) as pppp
)
خطا میده و یا من شکل دستورات را اشتباه طراحی کردم ببیند این جدول را طوری طراحی کردن که اگر نیاز به فیلد جدیدی در مشخصات فردی بود خود کاربر بتواند تولید کند و نرم افزار به ازای فیلد تولید شده یک ادیت باکس و کمبو باکس به اینترفیس اضافه می کند من می خواهم از روی این جدول یک ویو طراحی کنم کار از 35 رکور هر کدام را از لیست باک انتخاب کرد بصورت یک رکورد نشان بدهد ستون Name بعنوان عناوین ستون ها و ستون Value بعنوان مقادیر هر رکورد نمایش داده بشود ستون "کد شناسه" در تمام گزارش ها اورد خواهد شد ولی بقیه فیلدها اختیاری باشد و براساس خواسته کاربر تغییر یابد
یعنی بشکل زیر باشد
آخرین ویرایش به وسیله khorsandreza : دوشنبه 26 تیر 1396 در 09:56 صبح
SELECT
max([1]) as lastname,
max([2]) as FirstName,
max([3]) as Alias,
max([4]) as BirthDate,
max([5]) as BirthPlace,
prnt
FROM [TableName]
PIVOT
(
max(value)
FOR namecode IN ([1] ,[2] ,[3] ,[4] ,[5])
) AS pivottable
group by prnt
چون تعداد مشخصات ثابت نیست و ممکنه بیشتر بشه باید کوئری را به صورت داینامیک ایجاد کنید. در موردش میتونید جستجو کنید. البته در اینصورت کوئری مستعد نفوذ خواهد شد(sql injection) که باز میتونید در موردش جستجو کنید.
ممنون دقیقا همین را میخواستم
دقیقا منظورتان از "(sql injection)" را متوجه نشدم البته میدانم برای تزریق بعضی کدها برای لاگین و این نوع کارها ولی در اینجا خیلی متوجه نشدک البته اطلاعات من روی بستر اینترنت نیست رو سرور داخلی هست