ادغام ستونهای SQL Server در یک ستون UNION ALL UNPIVOT CROSS APPLY

راهنمای جامع ادغام ستون‌های متعدد SQL در یک ستون با UNION ALL، UNPIVOT و CROSS APPLY

در هنگام کار با SQL Server، اغلب نیاز داریم تا ساختار داده‌ها را به شکلی متفاوت از آنچه معمولاً استفاده می‌کنیم، تغییر دهیم. این وضعیت زمانی رخ می‌دهد که چندین ستون، داده‌های از یک نوع را نشان می‌دهند و قصد داریم آن‌ها را در یک ستون واحد با برچسب متناظر برای هر ستون ادغام کنیم. در ادامه، داده‌های نمونه‌ای که برای این مثال‌ها استفاده خواهیم کرد، آورده شده است:


CREATE TABLE #Employee (EmployeeId INT, Col1 VARCHAR(50), Col2 VARCHAR(50), Col3 VARCHAR(50), Col4 VARCHAR(50), Col5 VARCHAR(50));
INSERT INTO #Employee VALUES (1,'A','B','C','D','E'), (2,'AA','BB','CC','DD','EE'), (3,'AAA','BBB','CCC','DDD','EEE');
SELECT * FROM #Employee;

کوئری بالا نتیجه زیر را نمایش می‌دهد:

EmployeeId Col1 Col2 Col3 Col4 Col5
1 A B C D E
2 AA BB CC DD EE
3 AAA BBB CCC DDD EEE

روش ۱: استفاده از UNION ALL در SQL Server برای ادغام ستون‌ها

یکی از رایج‌ترین راه‌ها برای تبدیل چندین ستون به یک ستون واحد در SQL Server، استفاده از اپراتور UNION ALL است. این روش شامل انتخاب هر ستون به صورت جداگانه و سپس ترکیب نتایج با یکدیگر است. این رویکرد به ویژه برای مجموعه‌ داده‌های کوچک‌تر و زمانی که نیاز به کنترل دقیق بر نام ستون‌ها و ترتیب آن‌ها دارید، مفید است. این کوئری تمام رکوردهای جدول را گرفته و برای هر ستون جداگانه، یک رکورد جدید با مقادیر و نام ستون متناظر ایجاد می‌کند.


SELECT EmployeeId, 'Col1' AS ColumnName, Col1 AS ColumnValue
FROM #Employee
UNION ALL
SELECT EmployeeId, 'Col2' AS ColumnName, Col2 AS ColumnValue
FROM #Employee
UNION ALL
SELECT EmployeeId, 'Col3' AS ColumnName, Col3 AS ColumnValue
FROM #Employee
UNION ALL
SELECT EmployeeId, 'Col4' AS ColumnName, Col4 AS ColumnValue
FROM #Employee
UNION ALL
SELECT EmployeeId, 'Col5' AS ColumnName, Col5 AS ColumnValue
FROM #Employee
ORDER BY EmployeeId, ColumnName;

روش ۲: استفاده از UNPIVOT در SQL Server برای تغییر شکل داده

دستور UNPIVOT در SQL Server ابزار قدرتمندی برای تغییر شکل داده‌ها است که به شما امکان می‌دهد چندین ستون را به ردیف‌ها تبدیل کنید. این روش برای زمانی که تعداد زیادی ستون برای ادغام دارید و می‌خواهید یک راه‌حل مقیاس‌پذیر و خوانا داشته باشید، بسیار مؤثر است. UNPIVOT دو ستون جدید ایجاد می‌کند: یکی برای نام ستون‌های اصلی و دیگری برای مقادیر آن‌ها. در مثال زیر، ما ستون‌های Col1 تا Col5 را به یک ستون ColumnValue تبدیل می‌کنیم و نام اصلی هر ستون را در ColumnName قرار می‌دهیم.


SELECT EmployeeId, ColumnName, ColumnValue
FROM #Employee
UNPIVOT
(
    ColumnValue FOR ColumnName IN (Col1, Col2, Col3, Col4, Col5)
) AS UnpivotTable
ORDER BY EmployeeId, ColumnName;

روش ۳: استفاده از CROSS APPLY و VALUES در SQL Server برای انعطاف‌پذیری بیشتر

استفاده از CROSS APPLY همراه با سازنده VALUES یک راهکار بسیار انعطاف‌پذیر برای ادغام ستون‌ها در SQL Server ارائه می‌دهد. این تکنیک به شما امکان می‌دهد تا یک جدول مجازی از جفت‌های نام-مقدار ایجاد کنید و سپس آن را به هر ردیف از جدول اصلی خود اعمال کنید. این روش، به خصوص زمانی که نیاز به انجام عملیات پیچیده‌تری بر روی مقادیر دارید یا می‌خواهید ستون‌های با نوع داده‌های مختلف را ترکیب کنید، مفید است. این رویکرد به شما کنترل دقیق‌تری بر روی نحوه نمایش داده‌ها می‌دهد و می‌تواند برای سناریوهای پیشرفته‌تر تغییر شکل داده‌ها، بهینه‌سازی کوئری را به همراه داشته باشد.


SELECT E.EmployeeId, V.ColumnName, V.ColumnValue
FROM #Employee E
CROSS APPLY


(VALUES ('Col1', E.Col1), ('Col2', E.Col2), ('Col3', E.Col3), ('Col4', E.Col4), ('Col5', E.Col5))


AS V(ColumnName, ColumnValue)
ORDER BY E.EmployeeId, V.ColumnName;

من علی دستجردی‌ام؛ عاشق کار با دیتا، از SQL Server تا بیگ‌دیتا و هوش مصنوعی. دغدغه‌ام کشف ارزش داده‌ها و به‌اشتراک‌گذاری تجربه‌هاست. ✦ رزومه من: alidastjerdi.com ✦

عضویت
منو باخبر کن!!!
guest
نام
ایمیل

0 دیدگاه
Inline Feedbacks
دیدن تمامی کامنتها

فوتر سایت

ورود به سایت

sqlyar

هنوز عضو نیستید؟

ورود به سایت

هنوز تبت نام نکردید ؟