একটি নাম এবং মান সহ একটি অপরিশোধিত সারির গণনা সহ দুটি সারণী দেওয়া হয়েছে , কীভাবে আমি CROSS JOIN
তাদের মানগুলির উপরে কোনও ক্রিয়াকলাপ প্রদর্শন করব ।
CREATE TEMP TABLE foo AS
SELECT x::text AS name, x::int
FROM generate_series(1,10) AS t(x);
CREATE TEMP TABLE bar AS
SELECT x::text AS name, x::int
FROM generate_series(1,5) AS t(x);
উদাহরণস্বরূপ, যদি সেই ফাংশনটি গুণক হয় তবে আমি কীভাবে নীচের মতো একটি (গুণ) টেবিল তৈরি করব,
এই সমস্ত (arg1,arg2,result)
সারি দিয়ে তৈরি করা যায়
SELECT foo.name AS arg1, bar.name AS arg2, foo.x*bar.x AS result
FROM foo
CROSS JOIN bar;
সুতরাং এটি কেবল উপস্থাপনের প্রশ্ন, আমি এটি একটি কাস্টম নামের সাথেও কাজ করতে চাই - এমন একটি নাম যা কেবল CAST
পাঠ্যে আর্গুমেন্ট নয় কেবল সারণীতে সেট করা হয়,
CREATE TEMP TABLE foo AS
SELECT chr(x+64) AS name, x::int
FROM generate_series(1,10) AS t(x);
CREATE TEMP TABLE bar AS
SELECT chr(x+72) AS name, x::int
FROM generate_series(1,5) AS t(x);
আমি মনে করি এটি একটি গতিশীল রিটার্ন-টাইপের সক্ষম ক্রসস্ট্যাব দিয়ে সহজেই সক্ষম হবে।
SELECT * FROM crosstab(
'
SELECT foo.x AS arg1, bar.x AS arg2, foo.x*bar.x
FROM foo
CROSS JOIN bar
', 'SELECT DISTINCT name FROM bar'
) AS **MAGIC**
কিন্তু, ছাড়া **MAGIC**
, আমি পেতে
ERROR: a column definition list is required for functions returning "record" LINE 1: SELECT * FROM crosstab(
রেফারেন্সের জন্য, উপরোক্ত উদাহরণগুলি নামের সাথে ব্যবহার করা এর মতো আরও কিছু tablefunc
'র crosstab()
চায়।
SELECT * FROM crosstab(
'
SELECT foo.x AS arg1, bar.x AS arg2, foo.x*bar.x
FROM foo
CROSS JOIN bar
'
) AS t(row int, i int, j int, k int, l int, m int);
তবে, এখন আমরা bar
আমাদের উদাহরণে টেবিলের সামগ্রী এবং আকার সম্পর্কে অনুমান করাতে ফিরে এসেছি । তাই যদি,
- সারণীগুলি নির্ধারিত দৈর্ঘ্যের হয়,
- তারপরে ক্রস-যোগটি অপরিজ্ঞাত মাত্রার ঘনককে উপস্থাপন করে (উপরের কারণে),
- ক্যাটাগরি-নামগুলি (ক্রস-ট্যাব পার্লেন্স) সারণীতে রয়েছে
এই জাতীয় উপস্থাপনা তৈরি করতে "কলাম সংজ্ঞা তালিকা" ছাড়াই পোস্টগ্র্রেএসকিউএল-এ আমরা কী করতে পারি?