SQL Server复杂CASE语句查询:生成指定格式入住迁出报表
SQL Server 查询解决方案
最终SQL语句
SELECT apt, id, MAX(CASE WHEN [IN] = 'yes' THEN StartDay END) AS moveindate, MAX(CASE WHEN [OUT] = 'yes' THEN EndDay END) AS moveoutdate, MIN(WeekNo) AS weekstart, MAX(WeekNo) AS weekend FROM YourTableName -- 替换为你的实际表名 GROUP BY apt, id HAVING MAX([OUT]) IS NOT NULL;
语句说明
- 分组合并:通过
GROUP BY apt, id将同一id(及关联的apt)的所有记录合并为一行。若apt与id并非一一对应,可根据业务逻辑调整分组字段。 - 入住日期提取:
MAX(CASE WHEN [IN] = 'yes' THEN StartDay END)筛选出IN标记为'yes'的StartDay,用MAX确保取到最新的入住日期;若需最早入住日期,可替换为MIN。 - 搬离日期提取:
MAX(CASE WHEN [OUT] = 'yes' THEN EndDay END)同理,提取OUT标记为'yes'的EndDay作为搬离日期。 - 周数范围计算:
MIN(WeekNo)和MAX(WeekNo)分别获取当前id对应的最早和最晚周数。 - 过滤条件:
HAVING MAX([OUT]) IS NOT NULL确保只保留存在非NULLOUT记录的id,过滤掉所有OUT均为NULL的条目。
内容的提问来源于stack exchange,提问作者lal
相关产品推荐
相关产品推荐

