একই সারিতে একাধিক নির্বাচনের জন্য ইউনিয়ন অল এর চেয়ে ভাল বিকল্প কি আছে?


10

স্কিমার উদাহরণ:

CREATE TABLE [dbo].[Base](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Option1ID] [int] NULL,
[Option2ID] [int] NULL,
[Option3ID] [int] NULL,
[Option1Name] [varchar] NULL,
[Option2Name] [varchar] NULL,
[Option3Name] [varchar] NULL,
[Option1LName] [varchar] NULL,
[Option2LName] [varchar] NULL,
[Option3LName] [varchar] NULL,)

ফলাফলগুলি পাওয়ার মতো কোনও উপায় রয়েছে যা এখানে প্রদর্শিত হবে:

ID | OptionID | OptionName | OptionLName

আমি ইউনিয়ন সমস্তটি ব্যবহার করে এটি অর্জন করার চেষ্টা করেছি তবে এর অর্থ আমার উদাহরণে একই সারিতে 3 বার অতিক্রম করা হয়েছে, আমার আসল সমস্যায় আমাকে এটি 10 ​​বার করতে হবে। উত্তরাধিকারের কোডের কারণে আমি টেবিলটি স্বাভাবিক করতে পারি না। কেবল একবার বেস সারিটি একবারে যাওয়ার কি কোনও উপায় আছে?

উত্তর:


23

আপনি ব্যবহার করতে পারেন CROSS APPLY ... VALUESথেকে UNPIVOTএকাধিক কলাম

SELECT ID,
       OptionID,
       OptionName,
       OptionLName
FROM   [dbo].[Base]
       CROSS APPLY (VALUES([Option1ID], [Option1Name], [Option1LName]),
                          ([Option2ID], [Option2Name], [Option2LName]),
                          ([Option3ID], [Option3Name], [Option3LName])) 
                     V( OptionID, OptionName, OptionLName) 

এর জন্য কার্যকর করার পরিকল্পনার একটি স্ক্যান রয়েছে Base। পরিকল্পনাটি আসলে ২০০৫ এর সামঞ্জস্যপূর্ণ পুনরায় লেখার জন্য একই রকমUNION ALL

SELECT ID,
       OptionID,
       OptionName,
       OptionLName
FROM   [dbo].[Base]
       CROSS APPLY (SELECT [Option1ID], [Option1Name], [Option1LName] UNION ALL
                    SELECT [Option2ID], [Option2Name], [Option2LName] UNION ALL
                    SELECT [Option3ID], [Option3Name], [Option3LName]) 
                     V( OptionID, OptionName, OptionLName)  

তবে আমি অনুমান করি UNION ALLআপনি যেগুলি এড়াতে চেষ্টা করেছিলেন তা হ'ল একাধিক স্ক্যান

SELECT ID,
       [Option1ID],
       [Option1Name],
       [Option1LName]
FROM   [dbo].[Base]
UNION ALL
SELECT ID,
       [Option2ID],
       [Option2Name],
       [Option2LName]
FROM   [dbo].[Base]
UNION ALL
SELECT ID,
       [Option3ID],
       [Option3Name],
       [Option3LName]
FROM   [dbo].[Base] 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.