PostgreSQL CASE… একাধিক শর্ত সহ


102

এখানে আমার টেবিলের একটি নির্যাস:

  gid    |    datepose    |    pvc
---------+----------------+------------
 1       |  1961          | 01
 2       |  1949          |
 3       |  1990          | 02
 1       |  1981          |
 1       |                | 03
 1       |                |

আমি SELECT CASEবেলো হিসাবে পিভিসি কলামটি পূরণ করতে চাই :

SELECT

 gid,

 CASE
  WHEN (pvc IS NULL OR pvc = '') AND datpose < 1980) THEN '01'
  WHEN (pvc IS NULL OR pvc = '') AND datpose >= 1980) THEN '02'
  WHEN (pvc IS NULL OR pvc = '') AND (datpose IS NULL OR datpose = 0) THEN '03'
 END AS pvc

FROM my_table ;

ফলাফলটি সোর্স টেবিলের মতো একই সামগ্রী, কিছুই ঘটেনি এবং আমি pg_log ফাইলগুলিতে কোনও ত্রুটি বার্তা পাই না। এটি সিনট্যাক্স ত্রুটি হতে পারে, বা WHEN দফার মধ্যে একাধিক শর্ত ব্যবহারে সমস্যা হতে পারে?

সাহায্য এবং পরামর্শের জন্য ধন্যবাদ!


আপনি নাল মানটি প্রদর্শন করতে পারেন যেখানে এটি নাল হয় (যাতে আমরা নাল এবং খালি স্ট্রিংয়ের মধ্যে পার্থক্য দেখতে পারি)? যেমনটি রয়েছে, NULLউদাহরণস্বরূপ একটি স্ট্রিং রয়েছে
প্যাকো

4
বন্ধনী নিয়ে আপনারও সমস্যা আছে। কেন 1980 এর পরে বন্ধ একটি বন্ধনী আছে? (উভয় জায়গায়)
পাকো

উত্তর:


166

এই ধরণের কোড সম্ভবত আপনার পক্ষে কাজ করা উচিত

SELECT
 *,
 CASE
  WHEN (pvc IS NULL OR pvc = '') AND (datepose < 1980) THEN '01'
  WHEN (pvc IS NULL OR pvc = '') AND (datepose >= 1980) THEN '02'
  WHEN (pvc IS NULL OR pvc = '') AND (datepose IS NULL OR datepose = 0) THEN '03'
  ELSE '00'
 END AS modifiedpvc
FROM my_table;


 gid | datepose | pvc | modifiedpvc 
-----+----------+-----+-------------
   1 |     1961 | 01  | 00
   2 |     1949 |     | 01
   3 |     1990 | 02  | 00
   1 |     1981 |     | 02
   1 |          | 03  | 00
   1 |          |     | 03
(6 rows)

4
প্রায় নিখুঁত ;-)! আমি কেবল এটির ELSE '00'সাথে প্রতিস্থাপন করব ELSE pvcযাতে বিদ্যমান মানগুলিকে pvcকলামে রাখতে পারি , অন্যথায় সেগুলি '00' (কেস pvc IS NOT NULL) দিয়ে স্ক্র্যাচ করা হয় । অনেক ধন্যবাদ!
উইলটোম্যাপ

আমি কি ELSE এড়িয়ে যেতে পারি?
জোন

ইএলএসই alচ্ছিক। কোনও ইএলএসই ছাড়া, দশটি WHEN দফার কোনওটিই মিলে না যায় তখন এক্সপ্রেশনটি NULL ফেরত আসবে।
ক্লাউজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.