Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按条件分组_Sql_Sql Server - Fatal编程技术网

Sql 按条件分组

Sql 按条件分组,sql,sql-server,Sql,Sql Server,我有以下方式的数据 ColumnA ColumnB 7675 22838 7675 24907 7675 NULL 柱 7675 22838 7675 24907 7675空 我希望得到以下结果 ColumnA ColumnB 7675 2 (need total count for Not Null value) 7675 0 (need count 0 for NULL value) 柱 7675 2(非空值需要总计数) 7675 0(空值需要计

我有以下方式的数据

ColumnA ColumnB 7675 22838 7675 24907 7675 NULL 柱 7675 22838 7675 24907 7675空 我希望得到以下结果

ColumnA ColumnB 7675 2 (need total count for Not Null value) 7675 0 (need count 0 for NULL value) 柱 7675 2(非空值需要总计数) 7675 0(空值需要计数0)
您可以很容易地进行计数和求和,如果有很多行,那么计数和求和可能会更快,而不是使用并集两次选择所有行

SELECT columna, columnb, SUM(mycount) 
FROM
(   SELECT *, COUNT(columnb) as mycount 
    FROM test
    GROUP BY columnb
)t
GROUP BY mycount
ORDER BY CASE WHEN mycount = 0 THEN 1 ELSE 2 END DESC;

您可以轻松地进行计数和求和,如果有很多行,则计数和求和可能会更快,而不是使用并集两次选择所有行

SELECT columna, columnb, SUM(mycount) 
FROM
(   SELECT *, COUNT(columnb) as mycount 
    FROM test
    GROUP BY columnb
)t
GROUP BY mycount
ORDER BY CASE WHEN mycount = 0 THEN 1 ELSE 2 END DESC;

您可以引入一个计算列,指示
ColumnB
是否为空,并将其与
ColumnA
一起用作分组标准:

SELECT
  t.ColumnA,
  ColumnB = COUNT(t.ColumnB)
FROM
  dbo.YourTable AS t
CROSS APPLY
  (SELECT CASE WHEN t.ColumnB IS NULL THEN 1 ELSE 0 END) AS x (SubGroup)
GROUP BY
  t.ColumnA,
  x.SubGroup
ORDER BY
  t.ColumnA,
  x.SubGroup
;

对于空子组,
COUNT(t.ColumnB)
表达式始终为空,对于相应的非空子组,它将返回非空条目的数量。

您可以引入一个计算列,指示
ColumnB
是否为空,并将其与
ColumnA
一起用作分组标准:

SELECT
  t.ColumnA,
  ColumnB = COUNT(t.ColumnB)
FROM
  dbo.YourTable AS t
CROSS APPLY
  (SELECT CASE WHEN t.ColumnB IS NULL THEN 1 ELSE 0 END) AS x (SubGroup)
GROUP BY
  t.ColumnA,
  x.SubGroup
ORDER BY
  t.ColumnA,
  x.SubGroup
;

COUNT(t.ColumnB)
表达式对于空子组始终为空,对于相应的非空子组,它将返回非空条目的数量。

@evanv,因为它不会返回op wantsI没有注意到a列值相同的结果集。是的,Lamak在这一点上完全正确。@evanv,因为这不会返回op wantsI没有注意到A列值相同的结果集。是的,拉马克在这一点上完全正确。我喜欢你将空计数和非空计数分成不同列的方式。。。这不会产生@jitendra请求的结果,但可以说,这是一个比他/她想象的更好的结果。我喜欢你将空计数和非空计数分为不同列的方式。。。这不会产生@jitendra所要求的结果,但可以说,这是一个比他/她想象的更好的结果。