UNPIVOT
फ़ंक्शन को सामान्यीकृत न करने वाले फ़ंक्शन पर लागू करते समय , SQL सर्वर को आवश्यक है कि डेटाटाइप और लंबाई समान हो। मैं समझता हूं कि डेटाटाइप समान होना चाहिए लेकिन 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
स्तंभों का प्रयास करता / करती हूं :
select PersonId, ColumnName, Value
from People
unpivot
(
Value
FOR ColumnName in (FirstName, LastName)
) unpiv;
SQL सर्वर त्रुटि उत्पन्न करता है:
Msg 8167, स्तर 16, राज्य 1, पंक्ति 6
कॉलम "लास्टनाम" का प्रकार UNPIVOT सूची में निर्दिष्ट अन्य स्तंभों के प्रकार के साथ संघर्ष करता है।
त्रुटि को हल करने के लिए, हमें पहले एक Lastname
कॉलम का उपयोग करना होगा जिसमें कॉलम की लंबाई समान हो 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;
SQL फिडेल को डेमो के साथ देखें
SQL सर्वर 2005 में शुरू किए जा रहे UNPIVOT से पहले, मैं / कॉलम को unpivot करने के लिए एक के SELECT
साथ प्रयोग UNION ALL
करूंगा और कॉलम को एक ही लंबाई में बदलने की आवश्यकता के बिना क्वेरी चलेगी:firstname
lastname
select personid, 'firstname' ColumnName, firstname value
from People
union all
select personid, 'LastName', LastName
from People;
SQL फिडेल को डेमो के साथ देखें ।
हम CROSS APPLY
डेटाटाइप पर समान लंबाई के बिना डेटा का सफलतापूर्वक उपयोग करने में भी सक्षम हैं :
select PersonId, columnname, value
from People
cross apply
(
select 'firstname', firstname union all
select 'lastname', lastname
) c (columnname, value);
SQL फिडेल को डेमो के साथ देखें ।
मैंने MSDN के माध्यम से पढ़ा है, लेकिन मुझे डेटाटाइप पर लंबाई को समान करने के लिए तर्क को समझाते हुए कुछ भी नहीं मिला।
UNPIVOT का उपयोग करते समय समान लंबाई की आवश्यकता के पीछे तर्क क्या है?