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不再正确。