PDA

View Full Version : کوئری متفاوت(از ستون های یک سطر)



modern_amin
چهارشنبه 20 شهریور 1392, 11:11 صبح
سلام دوستان

تصور کنید من 10 سطر داررم با 100 ستون
میخام سلکتی بنویسم که بمن بگه چندتا از این ستونها سطرجاری مقدار مثلا 1 داره؟

محمد سلیم آبادی
چهارشنبه 20 شهریور 1392, 13:07 عصر
راجب این دست مسائل قبلا تبادل نظر شده در این تالار.
روش به این شکل هست که ابتدا باید داده ها را un-pivot کنید که روش های متنوعی برای این منظور وجود داره.
سپس نتیجه حاصل شده را گروه بندی میکنید و بعد از آن توسط دستور IIF تعداد را محاسبه میکنید:

SELECT key_column, SUM(IIF(value = 1, 1, 0) AS total
FROM table_name
CROSS APPLY (VALUES (col1), (col2), (col3), ... , (col100))D(value)
GROUP BY key_column;
به جای Col1-col2 و ... نام 100 ستون مورد نظر را بنویسد. همینطور به جای key_value شماره هر سطر و به جای table_name نام جدول را قرار دهید.

modern_amin
چهارشنبه 20 شهریور 1392, 14:23 عصر
دوست عزیز
آیا دستوری هست که سطر و ستون رو باهم عوض کنه و درواقع بچرخونه؟
مثلا در خروجی من 100 سطر و 10 ستون ببینم؟

محمد سلیم آبادی
چهارشنبه 20 شهریور 1392, 19:18 عصر
الان این یک مساله جدیده یا اینکه مساله قبلیتون رو نتونستین با کمک کدی که قرار دادم حل کنید؟
فکر کنم منظورتون عمل pivot باشه. اگر آری بله راه حل های متنوعی وجود داره که یکی از اون ها عملگر PIVOT هست.
جستجو کنید مطلب فراوانه.

modern_amin
شنبه 23 شهریور 1392, 10:22 صبح
نه متاسفانه
من هیچ اطلاعاتی در مورد اون ندارم
با توجه بوقت کمم سرچم زدم خوب سر در نیاوردم بهش مسلط بشم و بتونم درست و جامع استفاده کنم ازش
در حال حاضر با کیس ون و یذره قلق گیری راش انداختم و تونستم دقیق و سریع جواب بگیرم ازش

(CASE WHEN (j1) = '1' THEN 1 ELSE 0 END + CASE WHEN (j2) = '1' THEN 1 ELSE 0 END + CASE WHEN (j3) = '1' THEN 1 ELSE 0 END ) as tedad_1

ولی خب آیا دستوری هست بشه سطر و ستون رو عوض کرد
با کد نویسی میشه ولی میخام تو خوده sql انجام بدم و از دستور with استفاده کنم و دل و رودشو بریزم بیرون؟