Sql 多实例的CASE函数
我希望返回一个表,每个列都标记用户是否在给定的月份使用了某个产品。数据如下所示:Sql 多实例的CASE函数,sql,sql-server,Sql,Sql Server,我希望返回一个表,每个列都标记用户是否在给定的月份使用了某个产品。数据如下所示: User Date Product 001 1/1/2019 A 001 1/1/2019 A 001 1/1/2019 B 002 1/1/2019 A 002 1/1/2019 A 003 1/1/2019 C 004 1/1/2019 A 004 1/1/2019 B 004
User Date Product
001 1/1/2019 A
001 1/1/2019 A
001 1/1/2019 B
002 1/1/2019 A
002 1/1/2019 A
003 1/1/2019 C
004 1/1/2019 A
004 1/1/2019 B
004 1/1/2019 C
我希望SQL代码会产生这样的结果(即,每个产品类型对应一列,如果该产品出现在数据行中,则为1或0):
目前,即使存在多个实例,每列中也只有一个1。(这是在SQL Server中)
谢谢 您可以使用条件聚合:
select user,
max(case when product = 'A' then 1 else 0 end) as a,
max(case when product = 'B' then 1 else 0 end) as b,
max(case when product = 'C' then 1 else 0 end) as c
from t
group by user
您可以使用条件聚合:
select user,
max(case when product = 'A' then 1 else 0 end) as a,
max(case when product = 'B' then 1 else 0 end) as b,
max(case when product = 'C' then 1 else 0 end) as c
from t
group by user
MySQL还是SQL Server?它们是不同的产品…请向我们展示您的尝试。您声明的要求是针对给定的月份,但数据都是相同的日期,因此无法区分,并且您的输出表没有指示/显示您是否需要几个月的数据。我假设查询只需要拉取给定月份的数据?您真的只有三种产品吗?或者您是否需要查询根据当月发现的产品动态排列列?实际数据集有9个产品,但列应该是一致的(如果该用户有产品,则仅为1或0)MySQL或SQL Server?它们是不同的产品…请向我们展示您的尝试。您声明的要求是针对给定的月份,但数据都是相同的日期,因此无法区分,并且您的输出表没有指示/显示您是否需要几个月的数据。我假设查询只需要拉取给定月份的数据?您真的只有三种产品吗?或者您需要查询根据当月发现的产品动态排列列吗?实际数据集有9个产品,但列应该是一致的(如果该用户的产品存在,则仅为1或0),我最初使用的是COUNT(凯斯……但马克斯似乎在工作。我想知道why@ryans1,您知道如何为给定的月份添加where子句吗?@DaniDev…您只需在
group by
@GordonLinoff之前添加一个where
子句,是的,只是想确保他(@ryans1)拥有他所需要的一切。我最初使用的是COUNT(凯斯……但马克斯似乎在工作。我想知道why@ryans1,您知道如何为给定的月份添加where子句吗?@DaniDev…您只需在group by
@GordonLinoff之前添加一个where
子句,是的,只是想确保他(@ryans1)拥有所需的一切。