ইনস্টল করুন অতিরিক্ত মডিউল tablefunc
একবার প্রতি ডাটাবেস, যা ফাংশন প্রদান করে crosstab()
। পোস্টগ্রাগেস 9.1 যেহেতু আপনি এটির CREATE EXTENSION
জন্য ব্যবহার করতে পারেন :
CREATE EXTENSION IF NOT EXISTS tablefunc;
উন্নত পরীক্ষার কেস
CREATE TABLE tbl (
section text
, status text
, ct integer -- "count" is a reserved word in standard SQL
);
INSERT INTO tbl VALUES
('A', 'Active', 1), ('A', 'Inactive', 2)
, ('B', 'Active', 4), ('B', 'Inactive', 5)
, ('C', 'Inactive', 7); -- ('C', 'Active') is missing
সাধারণ ফর্ম - অনুপস্থিত বৈশিষ্ট্যের জন্য উপযুক্ত নয়
crosstab(text)
সঙ্গে 1 ইনপুট পরামিতি:
SELECT *
FROM crosstab(
'SELECT section, status, ct
FROM tbl
ORDER BY 1,2' -- needs to be "ORDER BY 1,2" here
) AS ct ("Section" text, "Active" int, "Inactive" int);
রিটার্নস:
বিভাগ | সক্রিয় | নিষ্ক্রিয়
--------- + + -------- + + ----------
ক | 1 | 2
খ | 4 | 5
সি | 7 | - !!
- কাস্টিং এবং নতুন নামকরণের দরকার নেই।
- এর জন্য ভুল ফলাফলটি নোট করুন
C
: মানটি 7
প্রথম কলামে পূরণ করা হয়েছে। কখনও কখনও, এই আচরণটি কাঙ্ক্ষিত, তবে এই ব্যবহারের ক্ষেত্রে নয়।
- সহজ ফর্মটি সরবরাহিত ইনপুট ক্যোয়ারিতে ঠিক তিনটি কলামেও সীমাবদ্ধ : সারি_নাম , বিভাগ , মান । নীচে 2-প্যারামিটার বিকল্পের মতো অতিরিক্ত কলামগুলির জন্য কোনও স্থান নেই।
নিরাপদ ফর্ম
crosstab(text, text)
সঙ্গে 2 ইনপুট প্যারামিটার:
SELECT *
FROM crosstab(
'SELECT section, status, ct
FROM tbl
ORDER BY 1,2' -- could also just be "ORDER BY 1" here
, $$VALUES ('Active'::text), ('Inactive')$$
) AS ct ("Section" text, "Active" int, "Inactive" int);
রিটার্নস:
বিভাগ | সক্রিয় | নিষ্ক্রিয়
--------- + + -------- + + ----------
ক | 1 | 2
খ | 4 | 5
সি | | 7 - !!
জন্য সঠিক ফলাফল নোট করুন C
।
দ্বিতীয় প্যারামিটারটি যে আয় এক কোন প্রশ্নের সাথে হতে পারে সারি অ্যাট্রিবিউট প্রতি শেষে কলাম সংজ্ঞা ক্রম মিলে। প্রায়শই আপনি অন্তর্নিহিত টেবিল থেকে আলাদা আলাদা বৈশিষ্ট্যগুলি এর মতো জিজ্ঞাসা করতে চাইবেন:
'SELECT DISTINCT attribute FROM tbl ORDER BY 1'
ম্যানুয়ালটিতে।
যেহেতু আপনাকে যে কোনও উপায়ে কলাম সংজ্ঞা তালিকার সমস্ত কলামগুলি বানান করতে হয়েছে (প্রাক-সংজ্ঞায়িত রূপগুলি ব্যতীত ), সাধারণত এটি প্রকাশের মতো সংক্ষেপে একটি সংক্ষিপ্ত তালিকা সরবরাহ করা আরও দক্ষ :crosstabN()
VALUES
$$VALUES ('Active'::text), ('Inactive')$$)
অথবা (ম্যানুয়ালটিতে নেই):
$$SELECT unnest('{Active,Inactive}'::text[])$$ -- short syntax for long lists
উদ্ধৃতি সহজ করার জন্য আমি ডলার কোটিং ব্যবহার করেছি ।
আপনি এমনকি আউটপুট কলাম বিভিন্ন ধরনের তথ্য দিয়ে crosstab(text, text)
- যতদিন মান কলামের টেক্সট উপস্থাপনা লক্ষ্য টাইপ জন্য বৈধ ইনপুট হয়। এই ভাবে আপনি থাকতে পারে বিভিন্ন ধরনের এবং আউটপুট গুণাবলীর text
, date
, numeric
নিজ নিজ বৈশিষ্ট্য জন্য ইত্যাদি। ম্যানুয়ালটিতে অধ্যায়টিরcrosstab(text, text)
শেষে একটি কোড উদাহরণ রয়েছে ।
ডিবি <> ফিডল এখানে
উন্নত উদাহরণ
\crosstabview
পিএসএইচএল-তে
পোস্টগ্রিস 9.6 এই মেটা-কমান্ডটিকে তার ডিফল্ট ইন্টারেক্টিভ টার্মিনাল পিএসএকিএল-তে যুক্ত করেছে । আপনি প্রথম crosstab()
প্যারামিটার হিসাবে যে ক্যোয়ারীটি চালাতে পারেন তা চালিয়ে দিতে এবং এটিকে \crosstabview
(তাত্ক্ষণিকভাবে বা পরবর্তী পদক্ষেপে) ফিড করতে পারেন । ভালো লেগেছে:
db=> SELECT section, status, ct FROM tbl \crosstabview
উপরের মতো অনুরূপ ফলাফল, তবে এটি ক্লায়েন্টের পক্ষে একচেটিয়াভাবে উপস্থাপনের বৈশিষ্ট্য । ইনপুট সারিগুলি কিছুটা আলাদাভাবে চিকিত্সা করা হয়, তাই ORDER BY
এটি প্রয়োজন হয় না। \crosstabview
ম্যানুয়ালটিতে বিশদ । পৃষ্ঠার নীচে আরও কোড উদাহরণ রয়েছে।
ড্যানিয়েল ভেরিট (পিএসকিএল বৈশিষ্ট্যের লেখক) দ্বারা ডিবিএএসই সম্পর্কিত সম্পর্কিত উত্তর:
পূর্বে গৃহীত উত্তর পুরানো হয়েছে।
ফাংশনের রূপটি crosstab(text, integer)
পুরানো। দ্বিতীয় integer
প্যারামিটার উপেক্ষা করা হয়। আমি বর্তমান ম্যানুয়ালটি উদ্ধৃত করছি :
crosstab(text sql, int N)
...
অপ্রচলিত সংস্করণ crosstab(text)
। প্যারামিটারটি N
এখন উপেক্ষা করা হয়েছে, যেহেতু মান কলামগুলির সংখ্যা সর্বদা কলিং কোয়েরি দ্বারা নির্ধারিত হয়
অকারণে ingালাই এবং নতুন নামকরণ।
কোনও সারিতে সমস্ত বৈশিষ্ট্য না থাকলে এটি ব্যর্থ হয়। অনুপস্থিত বৈশিষ্ট্যগুলি সঠিকভাবে পরিচালনা করতে উপরের দুটি ইনপুট প্যারামিটার সহ নিরাপদ বৈকল্পিক দেখুন।
ORDER BY
এক-প্যারামিটার আকারে প্রয়োজন বোধ করা হয় crosstab()
। ম্যানুয়াল:
অনুশীলনে এসকিউএল কোয়েরি সর্বদা নির্দিষ্ট ORDER BY 1,2
করে ইনপুট সারিগুলি যথাযথভাবে অর্ডার করা হয়েছে তা নিশ্চিত করতে হবে