এসকিউএল সার্ভার: স্ট্রিং ডেটা পিআইওভিটিংয়ের উদাহরণ


125

কয়েকটি সাধারণ এসকিউএল সার্ভার পিভট উদাহরণগুলি সন্ধান করার চেষ্টা করা হচ্ছে। আমি যে উদাহরণগুলির সন্ধান পেয়েছি তার মধ্যে বেশিরভাগ সংখ্যা গণনা বা সংযুক্তি জড়িত। আমি কেবল কিছু স্ট্রিং ডেটা পিভট করতে চাই। উদাহরণস্বরূপ, আমার কাছে নিম্নলিখিতটি ফিরে আসার একটি প্রশ্ন রয়েছে।

Action1 VIEW  
Action1 EDIT  
Action2 VIEW  
Action3 VIEW  
Action3 EDIT  

আমি ফলাফলগুলি করতে পিভট (এমনকি যদি সম্ভব হয়) ব্যবহার করতে চাই:

Action1 VIEW EDIT  
Action2 VIEW NULL  
Action3 VIEW EDIT  

পিভট কার্যকারিতা দিয়ে কি এটিও সম্ভব?


1
পরীক্ষা করে দেখুন সারিতে কলাম (পিভট) এবং (UNPIVOT) সারিতে কলাম
SQLMenace

এই লিঙ্কটি একবার দেখুন: dotnetgalactics.wordpress.com/2009/10/23/… সহায়ক হতে পারে;)
প্যাটো

স্বতন্ত্র আইটেমের সংখ্যা অজানা থাকলে আপনি এই লিঙ্কটি দেখতে পাবেন, অর্থ পিভোটিংয়ের পরে কলামগুলির মধ্যে কোনও গতিশীল নয়। SQL সার্ভার পিভট: ডায়নামিক ক্যোয়ারী দিয়ে কলাম সারি রূপান্তর
maeenul

উত্তর:


165

মনে রাখবেন যে MAX সামগ্রিক ফাংশন সংখ্যার পাশাপাশি পাঠ্যের উপরেও কাজ করবে। এই ক্যোয়ারিতে কেবল একবার টেবিলটি স্ক্যান করা দরকার।

SELECT Action,
       MAX( CASE data WHEN 'View' THEN data ELSE '' END ) ViewCol, 
       MAX( CASE data WHEN 'Edit' THEN data ELSE '' END ) EditCol
 FROM t
 GROUP BY Action

+1 ডুড ... আপনি মারাত্মক বুদ্ধিমান are পিভট কীভাবে শিখতে হবে তার পরিবর্তে আমি যদি খুব তাড়াতাড়ি জানতে পারতাম তবে!
ashes999

@ সিলমারিল ৯৯ ধরে ধরে নিন যে প্রশ্নের দ্বিতীয় কলামের নাম 'ডেটা' এবং প্রথম কলামটি 'অ্যাকশন'
ইমান

1
এর ...ELSE NULL END...পরিবর্তে আমার ব্যবহার না করার কোনও কারণ আছে কি ...ELSE '' END...?
মো।

15
কোনটি দ্রুত, এটি বা পিভট?
রবার্ট জ্যাপিসেন

ওহ, তুমি আমার মনকে ফুটিয়ে তুলেছ। আমার মাথার পিছনে আমার এই ধারণাটি ছিল যে এসকিউএল সার্ভারটি "সবেমাত্র ডার্নিট করা উচিত!", তবে ভেবেছিলাম এটি করা সম্ভব হয়নি। তারপরে, আমি এটি দেখেছি।
ডেভিড হেই

54

সারণী সেটআপ:

CREATE TABLE dbo.tbl (
    action VARCHAR(20) NOT NULL,
    view_edit VARCHAR(20) NOT NULL
);

INSERT INTO dbo.tbl (action, view_edit)
VALUES ('Action1', 'VIEW'),
       ('Action1', 'EDIT'),
       ('Action2', 'VIEW'),
       ('Action3', 'VIEW'),
       ('Action3', 'EDIT');

আপনার টেবিল: SELECT action, view_edit FROM dbo.tbl

আপনার টেবিল

PIVOT ব্যবহার না করে প্রশ্ন:

SELECT Action, 
[View] = (Select view_edit FROM tbl WHERE t.action = action and view_edit = 'VIEW'),
[Edit] = (Select view_edit FROM tbl WHERE t.action = action and view_edit = 'EDIT')
FROM tbl t
GROUP BY Action

পিভট ব্যবহার করে প্রশ্ন:

SELECT [Action], [View], [Edit] FROM
(SELECT [Action], view_edit FROM tbl) AS t1 
PIVOT (MAX(view_edit) FOR view_edit IN ([View], [Edit]) ) AS t2

উভয় প্রশ্নের ফলাফল:
এখানে চিত্র বর্ণনা লিখুন


এই বিরল, স্পষ্ট উত্তরের জন্য ধন্যবাদ। এটি অত্যন্ত উদাহরণস্বরূপ একটি উদাহরণ এবং ফলস্বরূপ ডেটাসেটগুলি দেখায়
real_yggdrasil

আমি জানি এটি পুরানো, তবে এটি পরিষ্কার, আমি দেখেছি সেরা চিত্রিত পাইভট প্রদর্শনী।
স্ট্যান শ

52

আপনি যদি বিশেষত এসকিউএল সার্ভার পিভট ফাংশনটি ব্যবহার করতে চান তবে আপনার দুটি মূল কলামকে অ্যাক্ট এবং সেন্টিমিডি বলা হয় ধরে ধরে এটি কাজ করা উচিত। (যদিও এটি দেখতে খুব সুন্দর নয়))

SELECT act AS 'Action', [View] as 'View', [Edit] as 'Edit'
FROM (
    SELECT act, cmd FROM data
) AS src
PIVOT (
    MAX(cmd) FOR cmd IN ([View], [Edit])
) AS pvt


6

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

select 
    distinct a,
    (select distinct t2.b  from t t2  where t1.a=t2.a and t2.b='VIEW'),
    (select distinct t2.b from t t2  where t1.a=t2.a and t2.b='EDIT')
from t t1


0

আমার একটি পরিস্থিতি ছিল যেখানে আমি স্ট্রিংগুলি পার্স করছি এবং প্রশ্নে স্ট্রিংয়ের প্রথম দুটি অবস্থান হ'ল স্বাস্থ্যসেবা দাবির কোডিং মানের ক্ষেত্রের নাম names সুতরাং আমি স্ট্রিংগুলি বের করে এফ 4, ইউআর এবং ইউকিউ বা হোয়াট নোটের মান পাব। এটি একটি রেকর্ডে বা এক ব্যবহারকারীর জন্য কয়েকটি রেকর্ডে দুর্দান্ত ছিল। তবে যখন আমি কয়েকশ রেকর্ড এবং সমস্ত ব্যবহারকারীর জন্য মানগুলি দেখতে চাইতাম তখন এটি একটি পাইভট হওয়া দরকার। বিশেষত এক্সেল করার জন্য প্রচুর রেকর্ড রফতানি করার জন্য এটি দুর্দান্ত ছিল। আমি যে নির্দিষ্ট প্রতিবেদনের অনুরোধ পেয়েছি তা হ'ল "প্রতিবার যখন কেউ বেনাড্রিলের জন্য দাবি জমা দিয়েছে, তারা F4, UR এবং UQ ক্ষেত্রগুলিতে কোন মান জমা করেছিল I আমার কাছে একটি আউটর অ্যাপ্লিকেশন ছিল যা নীচে কলটাইটেল এবং মান মান ক্ষেত্র তৈরি করেছিল had

PIVOT(
  min(value)
  FOR ColTitle in([F4], [UR], [UQ])
 )
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.