2017-06-14 115 views
0

如何使用case語句根據列中的值命名列。我有一個會員可以註冊白金,金,銀和銅牌會員。數據存儲在名爲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

如果我理解正確的值,一個方法是使用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

非常感謝您,我一直在考慮使用case語句。衷心感謝您。 – BreenDeen