برنامه نویسی

تبدیل سلول متقاطع به هدر ردیف ، هدر ردیف به ستون – از SQL به SPL #4

توضیحات و تجزیه و تحلیل مشکل:

یک جدول در پایگاه داده SQL Server را می توان به عنوان یک جدول متقاطع مشاهده کرد ، که در آن می توان ترکیب دو مقدار اول را به عنوان یک هدر ردیف مشاهده کرد و سه نام فیلد آخر را می توان به عنوان عنوان ستون مشاهده کرد ، جایی که محتوا و کمیت از هدر ردیف نامشخص است.

جدول منبع

وظیفه: اکنون باید جدول را به یک جدول متقاطع جدید تبدیل کنیم ، جایی که سلولهای متقاطع اصلی به هدر ردیف های جدید تبدیل می شوند ، هدر ردیف اصلی به هدر ستون تبدیل می شود و هدر ستون اصلی Interdon ، Pickedtime و تحویل زمان جایگزین می شوند رشته ها وارد ، انتخاب شده ، تحویل داده شدند.

نتایج مورد انتظار

مقایسه کد:

SQL پویا

Declare @SQL varchar(max) = (
Select string_agg(col,',') 
 From  (Select distinct id,Col = quotename(concat(PartNum,'_',ID)) 
         From YourTable
        )  A
)

Set @SQL = ' 
Select *
 From  (
         Select Item = concat(PartNum,''_'',ID)
               ,B.* 
          From  YourTable A
          CROSS APPLY (VALUES (EnteredOn,''ENTERED'')
                             ,(PickedTime,''PICKED'')
                             ,(DeliveredTime,''DELIVERED'')
                       ) B(t_stamp,[Status])
       ) src
 Pivot ( max(Status) for Item in ('+ @SQL +') ) pvt
 Where t_stamp is not null
Exec(@SQL)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

SQL معمولی یک تابع محوری برای تبدیل ستون ردیف دارد ، اما نام ستون ها باید نوشته شود که نیاز به تغییر ساختار کد دارد. ابتدا از روشهای ذخیره شده یا SQL پویا برای تولید نام ستون استفاده کنید ، و سپس SQL را هجی کنید. کد بسیار پیچیده است.

چلپ چلوپ:

کد SPL بسیار ساده تر و درک ساده تر است: try.demo

اسکریپت کد SPL
A1: داده ها را بارگیری کرده و مقادیر دو قسمت اول را هماهنگ کنید.

A2 ، A4: برای تبدیل ستون ها به ردیف ها از Pivot@R استفاده کنید و از Pivot برای تبدیل ردیف ها به ستون ها بدون نوشتن نام ستون استفاده کنید.


دانلود منبع باز esproc spl و ببینید که چگونه SPL روند را ساده تر می کند: آدرس منبع باز.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا