我如何使用可变的CASE来创建GROUP BY

问题描述 投票:0回答:1

我需要在2个表(a和l)上进行联接(一对多关系)有时我存在有时不存在两个表都有一个日期。当l存在时,我需要对l.Date进行过滤,否则我将对a.Date进行过滤我的问题是,当l.Date为空或MONTH(l.Date)不为空时,如何按MONTH(a.Date)分组]

我收到此错误:

Msg 512,第16级,状态1,第2行子查询返回的值超过1。当子查询遵循=,!=,,> =或将子查询用作表达式时,不允许这样做。“

我的查询:

SELECT month,  
(SELECT COUNT(numero)   
FROM WR_AtivTecnicas a   
FULL OUTER JOIN WR_AtivTecnicasLinhas l ON l.NumeroAtiv = a.Numero   
WHERE ( (YEAR(l.Data) = null AND YEAR(a.Data) = '2019') OR YEAR(l.Data) = '2019') AND ( (MONTH(l.Data) = null AND MONTH(a.Data) = month) OR  MONTH(a.Data) = month)  
GROUP BY  
 CASE WHEN MONTH(l.Data) = null THEN MONTH(a.Data)  
 ELSE MONTH(l.DATA)  
 END)  
FROM(VALUES(1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12))[1 to 12](month)  

例如,WR_AtivTecnicas可以是:

Numero | Data    
-------|------------    
1      | 2019-01-01  
2      | 2019-02-01  
3      | 2019-02-10  

和WR_AtivTecnicaLinhas:

NumeroAtiv | Line | Data  
-----------|-------------    
1          |   1  | 2019-01-10  
1          |   2  | 2019-01-11  
3          |   1  | 2019-02-12  
3          |   2  | 2019-02-12  
3          |   3  | 2019-03-01  

以上示例的期望结果:

Month|Count    
-----|-----    
1    | 2    
2    | 3   
3    | 1    
...    
12   | 0    

月= 1至12

谢谢。

我需要在2个表(a和l)上进行联接(1对多的关系)有时l存在有时不存在两个表都有一个Date。当l存在时,我需要对l.Date进行过滤,否则我就对a.Date进行过滤。我的问题...

sql sql-server
1个回答
0
投票

谢谢大家,在我所有的查询工作完成之后(将“ = nulls”更改为“ IS NULL”,谢谢Larnu)我在这里找到错误:

© www.soinside.com 2019 - 2024. All rights reserved.