IIU C, вы можете попробовать coalesce + nullif :
nullif (expr1, expr2) - возвращает null, если expr1 равно expr2, или expr1 в противном случае.
Например (используя pyspark ):
df = spark.createDataFrame([(None,"","a"),("a","","b"),("",None,"c")],["desc1", "desc2", "desc3"])
df.createOrReplaceTempView("tb")
spark.sql("select *, coalesce(nullif(desc1,''), nullif(desc2,''), nullif(desc3,'')) as desc from tb").show()
+-----+-----+-----+----+
|desc1|desc2|desc3|desc|
+-----+-----+-----+----+
| null| | a| a|
| a| | b| a|
| | null| c| c|
+-----+-----+-----+----+
поэтому для вашей задачи используйте следующее:
coalesce(nullif(p1.ProductDesc,''), nullif(p2.PrdDesc,''), nullif(p3.Product_Desc,'')) as Product_Description
BTW. вы также можете просто заменить все IFF
в исходном SQL на IF
.