2017-06-14 9 views
0

ケース文を使用して、列に含まれる値に基づいて列の名前を付けるにはどうすればよいですか。私は、プラチナ、ゴールド、シルバー、ブロンズの会員に登録できるクラブのメンバーがいます。データはCUST_MBR_INFOというテーブルに格納されます。メンバーシップタイプとCUST_IDで顧客を関連付けることができるようにしたい。以下の情報を組み合わせた単一のクエリで表示することは可能ですか?私のクエリは個々のラベルを取得するために機能しますが、私は本当に単一のクエリを使用したいと思います。すべてのラベルは、CUST_IDが正しい表題に含まれていて、表に印刷されている必要があります。Oracle SQL条件式の値に基づいて列のエイリアスを選択します。

PLATINUM_CUSTOMER GOLD_CUSTOMER SILVER_CUSTOMER BRONZE_CUSTOMER

1222     -   -      - 
-      3122    -      - 

会員種別は2列

--CUST_ID 1222 
--PLATINUM_CUSTOMER 
SELECT CUST_ID,PROD_CODE AS PLATINUM_CUSTOMER FROM CUST_MBR_INFO 
WHERE PROD_CATG_VAL = 'PLATINUM' 
AND M_TYP_CDE = '1' 



--CUST_ID 3122 
--GOLD 
SELECT CUST_ID,PROD_CODE AS GOLD_CUSTOMER FROM CUST_MBR_INFO 
WHERE PROD_CATG_VAL = 'GOLD' 
AND M_TYP_CDE = '2' 

--CUST_ID 3422 
--SILVER 
SELECT CUST_ID,PROD_CODE AS SILVER_CUSTOMER FROM CUST_MBR_INFO 
WHERE PROD_CATG_VAL = 'SILVER' 
AND M_TYP_CDE = '3' 

--CUST_ID 94344 
--BRONZE_CUSTOMER 
SELECT CUST_ID,PROD_CODE AS BRONZE_CUSTOMER FROM CUST_MBR_INFO 
WHERE PROD_CATG_VAL = 'BRONZE' 
AND M_TYP_CDE = '4 
+0

できません。エイリアスはハードコードされている必要があります(動的SQLを使用しない限り、SQLとはまったく異なります - 名前に「SQL」が含まれていても、強くお勧めします)。 – mathguy

答えて

0

の値に基づいており、私が正しく理解していれば、1つの方法は、UNION ALLを使用することです:

SELECT CUST_ID as Platinum, NULL as Gold, NULL as Silver, NULL as Bronze 
FROM CUST_MBR_INFO 
WHERE PROD_CATG_VAL = 'PLATINUM' AND M_TYP_CDE = '1' 
UNION ALL 
SELECT NULL as Platinum, CUST_ID as Gold, NULL as Silver, NULL as Bronze 
FROM CUST_MBR_INFO 
WHERE PROD_CATG_VAL = 'GOLD' AND M_TYP_CDE = '2' 
UNION ALL 
SELECT NULL as Platinum, NULL as Gold, CUST_ID as Silver, NULL as Bronze 
FROM CUST_MBR_INFO 
WHERE PROD_CATG_VAL = 'SILVER' AND M_TYP_CDE = '3' 
UNION ALL 
SELECT NULL as Platinum, NULL as Gold, NULL as Silver, CUST_ID as Bronze 
FROM CUST_MBR_INFO 
WHERE PROD_CATG_VAL = 'BRONZE' AND M_TYP_CDE = '4'; 

これ以外の方法もありますこれは、あなたのユースケースにとっては最も単純なようです。

+0

ありがとうございました。私は、ケースステートメントを使用することについて考えていませんでした。あなたに感謝します。 – BreenDeen

関連する問題