SQL-如何从同一列中的行值获取列(SQL Server 2016)
我需要从一列的行值派生列 这是行数据SQL-如何从同一列中的行值获取列(SQL Server 2016),sql,sql-server,Sql,Sql Server,我需要从一列的行值派生列 这是行数据 CustomerID Activity Date 10001 Active 2018-06-21 10001 Inactive 2018-06-25 10001 Active 2018-08-22 10001 Inactive 2018-10-06 这是我想要得到的结果: CustomerID ActiveDate InactiveDate 10001
CustomerID Activity Date
10001 Active 2018-06-21
10001 Inactive 2018-06-25
10001 Active 2018-08-22
10001 Inactive 2018-10-06
这是我想要得到的结果:
CustomerID ActiveDate InactiveDate
10001 2018-06-21 2018-06-25
10001 2018-08-22 2018-10-06
请帮忙!谢谢 您可以尝试按CustomerID、Activity在子查询
组中创建行号,然后执行条件聚合函数
SELECT CustomerID,
MAX(CASE WHEN Activity = 'Active' THEN Date END) ActiveDate,
MAX(CASE WHEN Activity = 'Inactive' THEN Date END) InactiveDate
FROM (
SELECT *,ROW_NUMBER() OVER(PARTITION BY CustomerID,Activity ORDER BY Date ) rn
FROM T
)t1
group by CustomerID,rn
你的逻辑有点不清楚。如果您想要下一个“非活动”日期:
请提供一份表格,您是否确定每个“活动”都有一个关联的“非活动”行,即紧跟其后的行(基于日期)?别想当然,去看看。不要只看在SSMS查询结果窗口中看到的第一组行(或“选择行”菜单的结果)。我看不出这里需要行号。如果不做行号,透视将只得到一行?或者你可以发布另一个解决方案吗?我期待着:)你是这个意思吗?啊,对不起,我刚刚意识到,我错过了这是同一个客户的整个过程。认为他们是两个不同的客户是的,问题是样本数据具有相同的Customerid
,因此我需要为其创建一个行号:)
select CustomerID, date as active_date, inactive_date
from (select t.*,
min(case when activity = 'Inactive' then date end) over (partition by CustomerID order by date desc) as inactive_date
from t
) t
where activity = 'Active';