SQL来合并我的行?尝试使用MAX,没有';我不能按计划工作。需要获取最新的行,以及忽略空值
基本上需要这样做:SQL来合并我的行?尝试使用MAX,没有';我不能按计划工作。需要获取最新的行,以及忽略空值,sql,sql-server,Sql,Sql Server,基本上需要这样做: +----+----------+----------+------+------+------+------+------+-----+-----+-----+ | ID | PlanYear | Plan_Num | JAN | FEB | MAR | APR | MAY | JUN | JUL | AUG | +----+----------+----------+------+------+------+------+------+-----+-----+-
+----+----------+----------+------+------+------+------+------+-----+-----+-----+
| ID | PlanYear | Plan_Num | JAN | FEB | MAR | APR | MAY | JUN | JUL | AUG |
+----+----------+----------+------+------+------+------+------+-----+-----+-----+
| 1 | 2018 | 3 | NULL | NULL | NULL | NULL | NULL | 333 | 333 | 000 |
| 1 | 2018 | 2 | NULL | NULL | NULL | 222 | 222 | 222 | 222 | 222 |
| 1 | 2018 | 1 | 111 | 111 | 111 | 111 | 111 | 111 | 111 | 111 |
+----+----------+----------+------+------+------+------+------+-----+-----+-----+
为此:
+----+----------+-----+-----+-----+-----+-----+-----+-----+-----+
| ID | PlanYear | JAN | FEB | MAR | APR | MAY | JUN | JUL | AUG |
+----+----------+-----+-----+-----+-----+-----+-----+-----+-----+
| 1 | 2018 | 111 | 111 | 111 | 222 | 222 | 333 | 333 | 000 |
+----+----------+-----+-----+-----+-----+-----+-----+-----+-----+
我试过了
MAX(JAN) OVER (PARTITION BY ID, PlanYear ORDER BY Plan_Num DESC) as JAN
但是没有运气。我猜可能是因为他们都有最多3个计划
任何指导都将不胜感激。这是在SQL Server上。谢谢 简单的解决方案,但有效
select id, planYear, max(case when jan is null then 0 else jan), ...
from yourTable
group by id, planYear
SELECT ID, PlanYear,
( SELECT TOP 1 Jan FROM myTable
ORDER BY Jan DESC ),
( SELECT TOP 1 Feb FROM myTable
ORDER BY Feb DESC )...
WHERE Jan IS NOT NULL
AND Feb IS NOT NULL
AND ...
GROUP BY ID, PlanYear
您的样本数据是否真正具有代表性?如果计划3,7月有000,你希望看到什么结果?请编辑您的样本数据并澄清。此外,这些字段是什么数据类型?它们看起来像
VARCHAR
@Nick.McDermaid,如果在Plan_Num为3时Jul有000,那么Jul将是底部表格上的000。瓦尔查什么都有。我将编辑第一篇文章,使其更加清晰。@DaleK,我已经试过了,没有骰子。最后在一行中出现了所有相同的值。@DaleK抱歉,没有想到特定的细节会影响解决方案。这确实会产生影响-请注意,@Chris answer不再正确。