تبدیل سلول متقاطع به هدر ردیف ، هدر ردیف به ستون – از 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
A1: داده ها را بارگیری کرده و مقادیر دو قسمت اول را هماهنگ کنید.
A2 ، A4: برای تبدیل ستون ها به ردیف ها از Pivot@R استفاده کنید و از Pivot برای تبدیل ردیف ها به ستون ها بدون نوشتن نام ستون استفاده کنید.
دانلود منبع باز esproc spl و ببینید که چگونه SPL روند را ساده تر می کند: آدرس منبع باز.