SQL-根据值拆分列

用户名

我正在尝试根据该列中的值将结果集中的列分为2列。因此,用户可以订阅多个项目,并且该用户可以具有2个可以接收此订阅的电子邮件地址。结果集提供了订阅列表及其订阅的电子邮件ID的对应条目。

数据库详细信息

Table 1 - user_subscriptions

user_id 
email_id - 1 for email id 1 and 2 for email id 2
subscription_id

Table 2 - subscriptions 

subscription_id
subscription_name

现在,无论是否通过电子邮件ID进行订阅,我都需要该用户的所有订阅。所以我得到这样的结果集

+----------------------+----------+
| subscription_name    | email_id |
+----------------------+----------+
| item1                | 1        |
| item1                | 2        |
| item2                | null     |
| item3                | 1        |
| item4                | null     |
| item5                | 2        |
+----------------------+----------+

所以我想将上面的结果集拆分为如下所示的内容

+-------------------+---------+---------+
| subscription_name | email_1 | email_2 |

+-------------------+---------+---------+
| item1             | 1 or Y  | 1 or Y  |
| item2             | 0 or N  | 0       |
| item3             | 1       | 0       |
| item4             | 0       | 0       |
| item5             | 0       | 1       |
+-------------------+---------+---------+

希望这个问题有意义。任何帮助,将不胜感激!

更新 - - - - - -

样本数据:

subscriptions - +-----------------+-------------------+ | subscription_id | subscription_name | +-----------------+-------------------+ | 1 | item1 | | 2 | item2 | | 3 | item3 | | 4 | item4 | | 5 | item5 | +-----------------+-------------------+

user_subscriptions

+---------+----------+-----------------+ | user_id | email_id | subscription_id | +---------+----------+-----------------+ | 101 | 1 | 1 | | 101 | 2 | 1 | | 101 | 1 | 3 | | 101 | 2 | 5 | | 102 | 1 | 1 | | 102 | 2 | 1 | +---------+----------+-----------------+

预期结果:

对于user_id = 101

+-----------------+-------------------+--------+--------+ | subscription_id | subscription_name | mail_1 | mail_2 | +-----------------+-------------------+--------+--------+ | 1 | item1 | Y | Y | | 2 | item2 | N | N | | 3 | item3 | Y | N | | 4 | item4 | N | N | | 5 | item5 | N | Y | +-----------------+-------------------+--------+--------+

胡安·卡洛斯·奥罗佩萨(Juan Carlos Oropeza)
SELECT 
     S.subscription_id, 
     S.subscription_name,
     CASE 
         WHEN US1.mail_ID IS NULL THEN 'N'
         ELSE 'Y'
     END mail_1,
     CASE 
         WHEN US2.mail_ID IS NULL THEN 'N'
         ELSE 'Y'
     END mail_2
FROM subscriptions S
LEFT JOIN user_subscriptions US1
  ON S.subscription_id = US1.subscription_id
 AND US1.mail_id = 1
LEFT JOIN user_subscriptions US2
  ON S.subscription_id = US2.subscription_id
 AND US2.mail_id = 2
WHERE us1.user_id = 5 -- or use a variable @user_ID
  OR  us2.user_id = 5 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据值拆分列

来自分类Dev

根据值范围拆分列

来自分类Dev

SQL拆分列

来自分类Dev

如何在Oracle SQL中拆分列值

来自分类Dev

使用Iseries SQL拆分列

来自分类Dev

MySQL根据联接表拆分列值

来自分类Dev

如何获得与SQL中的拆分列值相关的不同值

来自分类Dev

SQL Server - 如何在拆分列中选择我的值的记录

来自分类Dev

从另一个表中选择和拆分列值的 Sql 查询

来自分类Dev

拆分列表的值

来自分类Dev

拆分列并选择值

来自分类Dev

R根据模式拆分列

来自分类Dev

如何使用sql查询动态分组和拆分列?

来自分类Dev

拆分列并保留不同的数据集 SQL Server

来自分类Dev

如何使用 SQL 拆分列名属性和长度

来自分类Dev

根据结果拆分变量 - SQL

来自分类Dev

拆分列表和值

来自分类Dev

在sqlite中拆分列值

来自分类Dev

根据其他包含值的列复制行,然后返回包含拆分列值的行

来自分类Dev

SQL根据多列的固定值将行拆分为多行

来自分类Dev

根据不同的列值将 SQL 列动态拆分为多个列

来自分类Dev

在Pandas中,如何根据另一个列中的值拆分列?

来自分类Dev

根据定界符拆分列值,并与postgres中的另一列匹配

来自分类Dev

根据另一列值拆分列以准备单向 Anova 的数据

来自分类Dev

根据列表项的行拆分列表

来自分类Dev

根据字母和数字拆分列

来自分类Dev

根据字段中的模式拆分列

来自分类Dev

R根据名称拆分列表

来自分类Dev

如何根据字段标题拆分列