2017-06-14 154 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