仅对SQL Server中具有值的行进行分组

时间:2018-09-17 03:40:49

标签: sql sql-server

我有这个记录

atmno                          atmid       netpay
------------------------------ ----------- --------
1234123412345                  2           18426.68
NULL                           NULL          527.19
NULL                           NULL         4852.08
1234123412345                  1            4611.70
NULL                           NULL         1531.10

我只希望对atmno中具有值的行进行分组。对于其他专栏,我将采用atmid的最小值和netpay的总和。所需的输出应如下所示。

atmno                          atmid       netpay
------------------------------ ----------- ---------
1234123412345                  1           23038.38
NULL                           NULL          527.19
NULL                           NULL         4852.08
NULL                           NULL         1531.10

这是我到目前为止所做的。

SELECT atmno, MIN(atmid), SUM(netpay) 
FROM table 
GROUP BY atmno

您可能知道此查询还将对空值进行分组。我的目标是仅通过一个查询即可获得所需的结果。帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

您可以使用2个单独的选择查询,然后使用UNION ALL将结果合并为一个

SELECT atmno, MIN(atmid), SUM(netpay) 
FROM table 
WHERE atmno IS NOT NULL
GROUP BY atmno

UNION ALL

SELECT atmno, atmid, netpay
FROM   table
WHERE  atmno IS NULL

答案 1 :(得分:0)

Select atmno, atmid, netpay 
from table t1, (select atmno, min(atmid), netpay
from table where atmno is not null 
group by atmid) t2
where t2.atmno =t1.atmno and t2.atmid = t1.atmid;
order by case when atmno is null then 1 else 0,
atmid

答案 2 :(得分:0)

尝试一下

def create_puzzle(rows, cols):
    c = []
    r = []
    for x in range(cols):
        c.append(False)
    for y in range(rows):
        r.append(c)
    return LightsOutPuzzle(r)