如何使用case语句根据列中包含的值来命名列。我有一个俱乐部的成员,可以注册白金,金,银和铜会员。数据存储在名为CUST_MBR_INFO的表中。我希望能够通过成员资格类型和CUST_ID关联客户。是否可以在组合的单个查询中显示如下信息?我的查询用于获取单个标签,但我真的想使用单个查询。所有标签都应该可用,CUST_IDs落在正确的标题中,以便打印在表格中。
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 :(得分: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';
还有其他方法可以实现这一点,但这对您的用例来说似乎最简单。