更新日期: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
.
.
.
.
.
.
.
.
参考于