按行统计符合条件的列数

数据库环境:SQL SERVER 2005  

  有数据如图1,要求:统计每行中有多少列的值在20以内,有多少列大于20。在原表的基础上

新增2列显示,实现的结果如图2。

          

  如果直接在原表的基础上对列进行统计,会比较麻烦,可以通过列转行生成数据集1,再对1进行

分组统计得到结果集2,然后将原表和数据集2左联接,即可实现要求。

  0.数据准备

WITH    x0
          AS ( SELECT   1 AS id ,
                        2 AS one ,
                        8 AS two ,
                        13 AS three ,
                        15 AS four
               UNION ALL
               SELECT   2 AS id ,
                        9 AS one ,
                        11 AS two ,
                        25 AS three ,
                        36 AS four
               UNION ALL
               SELECT   3 AS id ,
                        3 AS one ,
                        4 AS two ,
                        5 AS three ,
                        9 AS four
               UNION ALL
               SELECT   4 AS id ,
                        8 AS one ,
                        13 AS two ,
                        40 AS three ,
                        42 AS four
               UNION ALL
               SELECT   5 AS id ,
                        1 AS one ,
                        3 AS two ,
                        9 AS three ,
                        21 AS four
             )

  1.列转行

,x1
          AS ( SELECT   id ,
                        attr ,
                        value
               FROM     x0 UNPIVOT( value FOR attr IN ( one, two, three, four ) ) AS t
             )

  2.分组统计,左联

SELECT  x0.id ,
            one ,
            two ,
            three ,
            four ,
            count1 ,
            count2
    FROM    x0
            LEFT JOIN ( SELECT  id ,
                                SUM(CASE WHEN value <= 20 THEN 1
                                         ELSE 0
                                    END) AS count1 ,
                                SUM(CASE WHEN value > 20 THEN 1
                                         ELSE 0
                                    END) AS count2
                        FROM    x1
                        GROUP BY id
                      ) x2 ON x2.id = x0.id

(本文完)

时间: 2024-10-13 00:45:29

按行统计符合条件的列数的相关文章

windows 日志文件查找符合条件的列并统计

因为要将windows每天登陆失败的次数统计, "wevtutil el  "           //列出日志名称 "wevtutil  gl  日志名称" //获取日志配置信息. 你可以使用短(如 ep /uni)或长(如enum-publishers /unicode)形式的命令和选项名称. 命令.选项和选项值不区分大小写. 变量均使用大写形式. wevtutil COMMAND [ARGUMENT [ARGUMENT] ...] [/OPTION:VALUE

EasyUI 获取行ID,符合条件的添加样式

function GetTableTrID() { var p = $('#PreFixgrid').prev().find('div table:eq(1)'); var ID = $(p).find('tbody tr:first').attr('id'); if (ID != undefined && ID != '' && ID.length > 3) { ID = ID.toString().substr(0, ID.toString().length -

oracle 统计指定条件下所有表的行数

今天 需要统计下指定用户下的所有表的行数,于是采用了oracle 内置视图: select table_name,num_rows  from dba_tables where owner = 'USERNAME';  或 select table_name,num_rows from user_all_tables ; 可是统计结果发现,有的表的统计数量和实际数量有差异,因此,直接自己写了个统计指定条件下表的记录的sql: --创建一个表用于存储计算结果 create table t_temp

VBA取得EXCEL表格中的行数和列数

VBA取得EXCEL表格中的行数和列数 初学EXCEL宏的童鞋,总是很想知道表格中含有数据的行数和列数,尤其是行数和列数不确定的情况下.这样可以避免很多的错误,并且可以提高效率.但每次用到的时候到网上查找时,总是给了很多无用的答案,往往找不到想要的结果.笔者也是每次使用时,临时查找总是很头疼.偶然发现一篇博客,上面详细记录了不同的方法,笔者测试了几种发现真的很好用.本着分享万岁的精神,将博客内容共享出来.希望对大家有所帮助. 来源:http://www.okexcel.com.cn/bbs/vi

用VBA计算WPS 表格ET EXCEL中的行数和列数的多重方法

用VBA计算WPS 表格ET EXCEL中的行数和列数 每种方法中上面的是Excel的行数,下面的是Excel的列数. 方法1: ActiveSheet.UsedRange.Rows.Count ActiveSheet.UsedRange.Columns.Count 缺点:有时可能会比实际数大一些,原因是如果你把最后几行(列)数据清除后(非整行或整列删除), 用这个命令仍返回未清除前的值.就是说现在虽然是空的,但是你曾经用过也算你的. 方法2: ActiveSheet.Range("A65535

一个自然数在1700和1800之间,且被5除余3,被7除余4,被11除余6,求符合条件的数

昨天晚上看了一道逻辑题:一个自然数在1700和1800之间,且被5除余3,被7除余4,被11除余6,求符合条件的数.题目后面写着,有人看了几分钟便给出了答案.我很好奇,此人是如何解答的. 我自己先琢磨了下,拿笔算了半天,最后一个巧合的情况下,得到了答案.此题的一个关键且明显的推论是:能被5除余3的数,肯定最后一位是3或者8.那么接下来怎么推呢?我从网上搜集了答案. 方案1: 这个数被5除余3,则此数个位数为3或8, 设这个数十位为x,则此数可表达为1703+10x,或1708+10x当此数为17

freemarker导出word——让表格数据行数 列数自动变化

行数.列数变化只需定义一个List<List<T>> freemarker遍历的话,只需要使用freemarker的标记性语言<#list report.qc_third_agentTable as  table2_tr>遍历即可,如图 实现的效果 freemarker导出word--让表格数据行数 列数自动变化,布布扣,bubuko.com

C#中如何获取一个二维数组的两维长度,即行数和列数?以及多维数组各个维度的长度?

如何获取二维数组中的元素个数呢? int[,] array = new int[,] {{1,2,3},{4,5,6},{7,8,9}};//定义一个3行3列的二维数组int row = array.Rank;//获取维数,这里指行数int col = array.GetLength(1);//获取指定维度中的元素个数,这里也就是列数了.(0是第一维,1表示的是第二维)int col = array.GetUpperBound(0)+1;//获取指定维度的索引上限,在加上一个1就是总数,这里表示

作业-- 统计文本文件中的字符数、单词数、行数

用AndroidStudio解析统计文本文件中的字符数.单词数.行数. 代码部分: package administrator.mc; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widge