(持续更新ing)sql-- 4-列转行 3-行转列 2-列纵向合并 1-列横向合并 (sql 两次查询的列合并,或者行合并)1. 一个列有几种类型,分别计算各类型条数

更新日期:2020-01-19 10:42

目录

5.列转行

4.行转列

3.纵向合并(增加数):将两条sql的查询结果合并在一起显示

2.横向合并(增加数):将两条sql的查询结果合并在一起显示

1.sql-- 一个列有几种类型,分别计算各类型条数

.
.
.
.
.

5.列转行

4.行转列

3.列纵向合并(增加数):将两条sql的查询结果拼接在一起显示

使用 FULL JOIN(…) ON

在这里插入图片描述

	--查询 几个总厂区的 一级编号和 厂区名称
	SELECT CLASSZERO,FACTORY_NAME FROM TB_FACTORYINFO WHERE ENERGYGRADE='0'

	--将几个总厂区的包含的所有车间的 总电量求和
	SELECT CONVERT(VARCHAR(3),A.FACTORY_CODE,120) CLASSZERO,SUM(A.POSITIVEZYGDL)TYPENUMBER FROM TB_DAILYAMMETER A
	GROUP BY CONVERT(VARCHAR(3), A.FACTORY_CODE,120)

--查询几个总厂区的 总用电量
SELECT ISNULL(A.CLASSZERO,0)CLASSZERO,ISNULL(A.FACTORY_NAME,0)FACTORY_NAME,ISNULL(B.TYPENUMBER,0) TYPENUMBER 
FROM (SELECT CLASSZERO,FACTORY_NAME FROM TB_FACTORYINFO WHERE ENERGYGRADE='0') A  
FULL JOIN (SELECT SUM(POSITIVEZYGDL)TYPENUMBER ,CONVERT(VARCHAR(3),FACTORY_CODE,120) CLASSZERO FROM TB_DAILYAMMETER GROUP BY CONVERT(VARCHAR(3),FACTORY_CODE,120)) B 
ON A.CLASSZERO=B.CLASSZERO 

在这里插入图片描述
在这里插入图片描述

3.1首页-能源日统计,只查询几个总厂区(一级厂区)的 0水/1电/2气/3风==ENERGYTYPE

在这里插入图片描述
在这里插入图片描述

--6.首页-今日能源统计,只查询几个总厂区(一级厂区)的 0水/1电/2气/3风==ENERGYTYPE
   --UNION ALL 将两条sql语句合并为一条 (PS:注意要列数相同,列的数据类型也相同)
   --ISNULL(A.CLASSZERO,0) 判断列是否为空,如果为空,设置临时显示值为0.
   --SUM(POSITIVEZYGDL)TYPENUMBER 求POSITIVEZYGDL列的总和 ,并设置别名为TYPENUMBER,index_device实体类中有这个属性,只是为了首页上显示方便而添加
   --CONVERT(VARCHAR(3),FACTORY_CODE,120) 截断字符串(FACTORY_CODE)只保留3位
   --DATETYPE='0'  日期类型为0本日  
   --ENERGYTYPE='2' 设置本条数据 能源类型默认为0水1电2气 3风,,index_device实体类中有这个属性,只是为了首页上显示方便而添加
   --CONVERT(NUMERIC(10,2),B.TYPENUMBER)  设置保留2位小数点,小数点前保留10位,加上小数点总共保留12位
SELECT ENERGYTYPE='1',ISNULL(A.FACTORY_NAME,0)FACTORY_NAME,ISNULL(CONVERT(NUMERIC(10,2),B.TYPENUMBER),0) TYPENUMBER FROM (SELECT CLASSZERO,FACTORY_NAME FROM TB_FACTORYINFO WHERE ENERGYGRADE='0') A 
 FULL JOIN (SELECT SUM(POSITIVEZYGDL)TYPENUMBER ,CONVERT(VARCHAR(3),FACTORY_CODE,120) CLASSZERO FROM TB_DAILYAMMETER WHERE DATETYPE='0' GROUP BY CONVERT(VARCHAR(3),FACTORY_CODE,120)) B ON A.CLASSZERO=B.CLASSZERO 
UNION ALL

SELECT ENERGYTYPE='0',ISNULL(A.FACTORY_NAME,0)FACTORY_NAME,ISNULL(CONVERT(NUMERIC(10,2),B.TYPENUMBER),0) TYPENUMBER FROM (SELECT CLASSZERO,FACTORY_NAME FROM TB_FACTORYINFO WHERE ENERGYGRADE='0') A 
 FULL JOIN (SELECT SUM(WATERMETERINGFLOW)TYPENUMBER ,CONVERT(VARCHAR(3),FACTORY_CODE,120) CLASSZERO FROM tb_dailywater WHERE DATETYPE='0' GROUP BY CONVERT(VARCHAR(3),FACTORY_CODE,120)) B ON A.CLASSZERO=B.CLASSZERO 
UNION ALL

SELECT ENERGYTYPE='2',ISNULL(A.FACTORY_NAME,0)FACTORY_NAME,ISNULL(CONVERT(NUMERIC(10,2),B.TYPENUMBER),0) TYPENUMBER FROM (SELECT CLASSZERO,FACTORY_NAME FROM TB_FACTORYINFO WHERE ENERGYGRADE='0') A 
 FULL JOIN (SELECT SUM(GASMETEREDFLOW)TYPENUMBER ,CONVERT(VARCHAR(3),FACTORY_CODE,120) CLASSZERO FROM TB_DAILYGAS WHERE DATETYPE='0' GROUP BY CONVERT(VARCHAR(3),FACTORY_CODE,120)) B ON A.CLASSZERO=B.CLASSZERO 

2.列横向合并(增加数):将两条sql的查询结果拼接在一起显示

使用 UNION ALL
在这里插入图片描述

--获取不同类型设备的数量
SELECT energytype,count(energytype)typenumber FROM tb_device GROUP BY energytype 
--设备总数
select count(*)as totalnumber from tb_device 


--3.将两条sql语句合并为一条 (PS:注意要列数相同,列的数据类型也相同)
SELECT energytype,count(energytype)typenumber FROM tb_device GROUP BY energytype  
UNION ALL 
select '总条数', count(*) from tb_device

1.sql–一个列有几种类型,分别计算各类型条数

SQL统计一个列中不同值的数量,并且根据这个数量的排序做一些额外的处理

在这里插入图片描述
在这里插入图片描述

--获取不同类型设备的数量
--写法1:
SELECT energytype,count(energytype)typenumber FROM tb_device GROUP BY energytype 
--写法2:
SELECT energytype,count(*)typenumber FROM tb_device GROUP BY energytype 

--带排序的:
SELECT energytype,count(energytype)typenumber FROM tb_device GROUP BY energytype 
ORDER BY typenumber desc

.
.
.

.
.

.
.
.

参考于

  1. https://blog.csdn.net/suhiymof/article/details/81221286
  2. https://blog.csdn.net/weixin_42467211/article/details/84345261
  3. https://bbs.csdn.net/topics/390797414?page=1
发布了36 篇原创文章 · 获赞 10 · 访问量 2824

猜你喜欢

转载自blog.csdn.net/VIP_CR/article/details/103854109
今日推荐