কলামের নামগুলি ইউএনপিভোটে গতিশীলভাবে পাস করা


10

নিম্নলিখিত তথ্য সহ আমার একটি টেবিল আছে

First         Second        Third         Fourth        Fifth         Sixth
2013-08-20    2013-08-21    2013-08-22    2013-08-23    2013-08-24    2013-08-25

এবং ব্যবহার UNPIVOT

SELECT Data
    ,DATENAME(DW, Data) AS DayName
FROM Cal
UNPIVOT(Data FOR D IN (
            First,
            Second,
            Third,
            Fourth,
            Fifth,
            Sixth  )) AS unpvt

আমি নিম্নলিখিত ফলাফল পেতে

Data        DayName
2013-08-20  Tuesday
2013-08-21  Wednesday
2013-08-22  Thursday
2013-08-23  Friday
2013-08-24  Saturday
2013-08-25  Sunday

এখন আমার প্রশ্নটি হল আমরা কলামের নামগুলি গতিশীলভাবে পাস করতে পারি UNPIVOTযাতে টেবিলে কলামগুলি বাড়লে আমাদের বিবৃতি পরিবর্তন করতে নাও পারে।

উত্তর:


14

আপনি যদি অজানা সংখ্যক কলামগুলি আনতে যাচ্ছেন যেগুলি আপনাকে অপিভোট করতে হবে, তবে আপনাকে গতিশীল এসকিউএল বাস্তবায়ন করতে হবে।

আপনি sys.columnsআপনার calটেবিলের সমস্ত কলামের নাম পেতে ব্যবহার করতে পারেন । আপনি যদি নিম্নলিখিত কোয়েরি ব্যবহার করেন তবে আপনি আপনার টেবিলের সমস্ত কলামের তালিকা পাবেন:

select C.name
from sys.columns c
where c.object_id = OBJECT_ID('dbo.cal') 

এখন আপনি এই ক্যোয়ারীটি সাথে সাথে FOR XML PATHকমাতে পৃথক হওয়া নামেরগুলির কমা দ্বারা পৃথক করা তালিকা তৈরি করতে ব্যবহার করতে পারেন :

select @colsUnpivot 
  = stuff((select ','+quotename(C.name)
           FROM sys.columns c
           WHERE c.object_id = OBJECT_ID('dbo.cal') 
           for xml path('')), 1, 1, '')

অবশেষে, আপনি এই তালিকাটি নেবেন এবং এটি সম্পাদন করার জন্য আপনার ক্যোয়ারী স্ট্রিংয়ে রাখবেন যাতে সম্পূর্ণ ক্যোয়ারীটি দেখতে পাবেন:

DECLARE @colsUnpivot AS NVARCHAR(MAX),
   @query  AS NVARCHAR(MAX)

select @colsUnpivot 
  = stuff((select ','+quotename(C.name)
           FROM sys.columns c
           WHERE c.object_id = OBJECT_ID('dbo.cal') 
           for xml path('')), 1, 1, '')

set @query 
  = 'select data, datename(dw, data) dayname
     from cal
     unpivot
     (
        data
        for d in ('+ @colsunpivot +')
     ) u'

exec sp_executesql @query;

ডেমো সহ এসকিউএল ফিডল দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.