যখন UNPIVOT
ফাংশনটি স্বাভাবিক হয় না তে প্রয়োগ করার সময় , এসকিউএল সার্ভারের ডেটাটাইপ এবং দৈর্ঘ্য একই হওয়া দরকার be আমি বুঝতে পারি কেন ডেটাটাইপটি একই হতে হবে তবে কেন UNPIVOT এর দৈর্ঘ্য একই হওয়ার দরকার?
ধরা যাক যে আমার কাছে নিম্নোক্ত নমুনা ডেটা রয়েছে যা আমাকে আনপিবট করতে হবে:
CREATE TABLE People
(
PersonId int,
Firstname varchar(50),
Lastname varchar(25)
)
INSERT INTO People VALUES (1, 'Jim', 'Smith');
INSERT INTO People VALUES (2, 'Jane', 'Jones');
INSERT INTO People VALUES (3, 'Bob', 'Unicorn');
যদি আমি এর অনুরূপ Firstname
এবং Lastname
কলামগুলিকে UNPIVOT করার চেষ্টা করি :
select PersonId, ColumnName, Value
from People
unpivot
(
Value
FOR ColumnName in (FirstName, LastName)
) unpiv;
এসকিউএল সার্ভার ত্রুটি উত্পন্ন করে:
এমএসজি 8167, স্তর 16, রাজ্য 1, লাইন 6
UNPIVOT তালিকায় নির্দিষ্ট অন্যান্য কলামগুলির ধরণের সাথে "শেষ নাম" কলামের ধরণের বিরোধ রয়েছে ts
ত্রুটিটি সমাধান করার জন্য, আমাদের অবশ্যই প্রথমে Lastname
কলামটি একই দৈর্ঘ্যের জন্য কাস্ট করতে একটি subquery ব্যবহার করতে হবে Firstname
:
select PersonId, ColumnName, Value
from
(
select personid,
firstname,
cast(lastname as varchar(50)) lastname
from People
) d
unpivot
(
Value FOR
ColumnName in (FirstName, LastName)
) unpiv;
ডেমো সহ এসকিউএল ফিডল দেখুন
UNPIVOT এর আগে SQL সার্ভার 2005 সালে সূচিত হয়ে, আমি একটি ব্যবহার করেন SELECT
সঙ্গে UNION ALL
unpivot করতে firstname
/ lastname
কলাম এবং কোয়েরি একই দৈর্ঘ্য আপনার কলাম রূপান্তর করতে প্রয়োজন ছাড়াই চালানো হবে:
select personid, 'firstname' ColumnName, firstname value
from People
union all
select personid, 'LastName', LastName
from People;
ডেমো সহ এসকিউএল ফিডল দেখুন ।
আমরা CROSS APPLY
ডেটাটাইপে একই দৈর্ঘ্য না রেখে ব্যবহার করে ডেটা সফলভাবে আনপিবট করতে সক্ষম হয়েছি :
select PersonId, columnname, value
from People
cross apply
(
select 'firstname', firstname union all
select 'lastname', lastname
) c (columnname, value);
ডেমো সহ এসকিউএল ফিডল দেখুন ।
আমি এমএসডিএন-এর মাধ্যমে পড়েছি তবে ডাটাটাইপটিতে দৈর্ঘ্য একই হওয়ার জন্য যুক্তির কারণ ব্যাখ্যা করার মতো কিছুই খুঁজে পেলাম না।
UNPIVOT ব্যবহার করার সময় একই দৈর্ঘ্যের প্রয়োজনের পিছনে যুক্তি কী?