1. 程式人生 > >SqlServer 根據欄位分類彙總資訊

SqlServer 根據欄位分類彙總資訊

在一張基礎表中,我們經常要根據一個欄位的不同表達方式來彙總資料。下面我們將進行簡單的彙總操作。
在資料庫中建立一個名為test的表
欄位型別如下圖


插入資料如下圖


這就是基礎表了

根據基礎表搜尋彙總資訊

根據欄位的值彙總資訊

下面是三種類型的彙總語句
--數值型別
select 
cast(byint as nvarchar) as '數字',
SUM(value) as '值'
from test group by byint
union all select '合計',SUM(value) from test
--字串型別
select 
bychar as '字串',
SUM(value) as '值'
from test group by bychar
union all select '合計',SUM(value) from test
--時間型別
select 
cast(bytime as nvarchar) as '時間',
SUM(value) as '值'
from test group by bytime
union all select '合計',SUM(value) from test
結果如下圖


因為每個彙總下面都加了一行合計,所以分類彙總欄位需要轉化為字串型別,這樣才不出錯。

根據欄位的函式彙總資訊

根據時間的不同函式一二彙總資訊語句如下
--時間型別日期
select 
CONVERT(nvarchar(10),bytime,120) as '時間',
SUM(value) as '值'
from test group by CONVERT(nvarchar(10),bytime,120)
union all select '合計',SUM(value) from test
--時間型別日期二
select 
CONVERT(nvarchar(10),bytime,120) as '時間',
(select SUM(value) from test t where CONVERT(nvarchar(10),t.bytime,120)=CONVERT(nvarchar(10),test.bytime,120)) as '值'
from test group by CONVERT(nvarchar(10),bytime,120)
union all select '合計',SUM(value) from test
--時間型別小時
select 
cast(DATEPART(HH,bytime) as nvarchar) as '時間',
SUM(value) as '值'
from test group by DATEPART(HH,bytime)
union all select '合計',SUM(value) from test
結果如下圖


第一段和第二段是根據時間的獲取日期的函式來彙總資訊的,大家看到結果是相同的。
那這兩段有什麼不同呢?
我們分別執行group by之前的語句,結果如下
第一段


第二段


第二段在沒有group by的情況下,每個彙總行都給了一張表的資訊,相當於聚合函式,只不過顯示多條資料罷了。
第三段是根據時間的獲取小時的函式來彙總資訊的。

根據欄位的自定義函式彙總資訊

根據數值型別不同的統計資訊彙總資訊的語句如下
--自定義函式
if exists(select 1 from sysobjects where id=OBJECT_ID('getresult') and OBJECTPROPERTY(id,'IsInlineFunction')=0)
drop function getresult
go
create function getresult(@scode nvarchar(50)) returns nvarchar(50)
begin
declare @result nvarchar(50)
if @scode%2=1 set @result= '單數'
else if @scode%2=0 set @result= '雙數'
else set @result= '其他'
return  @result
end
go
select 
dbo.getresult(byint) as '單雙數',
SUM(value) as '值'
from test group by dbo.getresult(byint)
union all select '合計',SUM(value) from test
簡單解釋一下語句:
1.在名為getresult的自定義函式存在的情況下刪除此函式
2.建立名為getresult的自定義函式,要求根據欄位判斷是否為單雙數
結果如下


總結
基礎表是死的,我們得到的資訊及展現形式是活的。
就像本文的格式一樣,文章的主體結構可以是以小一號的標題來展現,但主題的標題一定要突出。

相關推薦

SqlServer 根據分類彙總資訊

在一張基礎表中,我們經常要根據一個欄位的不同表達方式來彙總資料。下面我們將進行簡單的彙總操作。在資料庫中建立一個名為test的表 欄位型別如下圖 插入資料如下圖 這就是基礎表了 根據基礎表搜尋彙總資訊 根據欄位的值彙總資訊 下面是三種類型的彙總語句 --數值型別 s

Sqlserver根據查詢表和根據值查詢表的幾個方法

-------------Sqlserver根據欄位名稱查詢表(多個欄位值),例如查詢欄位名包含 ibatch和cbatch 的表 SELECT *FROM( SELECT t2.name  FROM syscolumns t1,sysobjects t2 WHERE t1

sqlserver 獲取所有表的型別等資訊

USE [MultipleAnalysisDataFY] GO /****** Object: View [dbo].[selectfieldtype] Script Date: 2018/11/7 星期三 12:02:27 ******/ SET ANSI_NULLS ON GO SET

Oracle 根據值查詢其所在的表、(只有資訊,連型別都不知道)

今天一哥們求助,oracle的我只知道ziduan欄位的值,連型別,大小設定全都不知道,如何查詢到該欄位所在的表,以及該欄位名。以下是我編寫的實際指令碼: 1.假設該欄位是varchar2或者char型別 DECLARE CURSOR cur_hh IS SELECT tabl

JSON,陣列根據分組

function GroupbyName(data, Name) { var map = {}, dest = []; for (var i = 0; i < data.length; i++) { var ai = data[i]; if (!map[ai[Name]]) { dest.push({

JSON,陣列根據多次分組

我們在前端開發過程中,遇到json物件,有時會需要多次分組。比如說,先按照是業務分組,然後再按照產品線分組,然後通過table或其他方式展示或操作 var obj1=[ { "demp":"001", "line":"a", "id":"1", }, { "demp":

python-進階教程-根據將記錄分組

0.摘要 根據資料中某一元素對資料進行分類是常會遇到的問題,本文通過介紹itertool.groupby()函式,根據字典中某一個值把資料進行分類。   1.itertool.groupby()函式 rows = [ {'address': '5412 N CLAR

SqlServer增加升級指令碼

1、在資料庫中增加一個儲存過程,以後該資料庫中新增欄位都可以呼叫此儲存過程來操作 USE [iponkan] --iponkan資料庫名 GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proced

DataGridView中根據取值顯示不同的行背景色

在dataGridView中根據不同的資料顯示不同的背景色便於區分資料,方便區分和檢視。基本方法就是遍歷所有行,根據欄位的區只要求,設定背景顏色。程式碼如下 //根據列表中資料不同,顯示不同顏色背景 foreach( DataGridViewRow

PHP----根據個數,迴圈列印字母排序,使用於PHPExcel

根據欄位個數,迴圈列印字母排序,使用於PHPExcel 最後拼裝成陣列 $tableheader = array('ID','學籍ID','退費單號','真實姓名','性別','手機號','QQ

Oracle和SQLServer修改的型別和長度,不為空

在SQLServer資料庫:       修改欄位型別和長度:               alter table   student|表名  alter col

Oracle資料庫查詢表結構、及註釋資訊

create or replace view sys.user_col_comments (table_name, column_name, comments) as select o.name, c.

sqlserver儲存格式(一)

資料頁 資料頁是包含已經被新增到某個資料庫表中的使用者資料的結構,SQLServer有3種資料頁面,每個頁面都以一種不同的格式儲存資料。分別是用於行內資料、行溢位資料和LOB資料的頁面。 和其他型別的頁面一樣,資料頁面具有8KB的固定長度,它們主要由3個主要部分組成,頁首、資料行和行偏移陣列 頁首 每個

sqlserver儲存格式(二)

lob資料單行的儲存格式 lob資料頁的測試方法遵循上一篇overflow相同的方法: 測試指令碼: create table dbo.hugerows ( a varchar(80), b nvarchar(max), c varchar(80), d varchar(80) ); ins

sqlserver 新增和註釋

修改欄位型別 USE agentMG ALTER TABLE AGENT_APPLY ADD agentType INT EXEC sys.sp_addextendedproperty @nam

獲取通過sql查詢資料庫的表,,主鍵,自增,型別等資訊

                1.查詢所有表,以及表的備註資訊。 Oracle資料庫   select t

mssql sqlservernull(空值)值替換為指定值的三種方法分享

create table test(keyId int identity, info varchar(30)) go insert into test(info)values('a'),('b'),(null),('d') go ---方法1:使用isnull替換

Java反射程式碼--07.根據呼叫所有set方法

/**   * 7.根據欄位呼叫所有set方法   *   */  public void reflect7(){       try {          Class cls = Class.forName("entity.UserBean");//載入UserBean類到記憶體中!獲取一個Class物件

ArcEngine 圖層標註 (根據、角度)

用AE來控制圖層是否顯示標註,以及已哪一個欄位作為標註的欄位,以哪一個欄位作為標註的角度,現將程式碼寫下來,以備以後差用。 publicvoid EnableFeatureLayerLabel(IFeatureLayer pFeaturelayer, string sLableField, IRg

ArcGIS屬性表根據條件賦值

問題描述:現需要根據某一欄位的不同值對另外一欄位賦值 示例1: Expression: Reclass(!WELL_YIELD!) Code Block: def Reclass(WellYi