1. 程式人生 > >SQL語句行列轉換(附帶資料庫、表、檢視操作)

SQL語句行列轉換(附帶資料庫、表、檢視操作)

本來只是想解決怎麼把資料的行和列進行轉換的,但最近覺得一些資料庫SQL語句的操作,很久沒用了,有點陌生。所以也就隨筆記錄一些簡單但很基本的操作。

我的資料庫是MSSQL2005.

第一部分主要的操作包含:資料庫的建立、刪除,表的增、刪、改,表中資料的增、刪、改、查,檢視的操作。

複製程式碼
  1 --查詢資料庫是否存在  2 if exists ( select * from sysdatabases where [name]='TestDB')
3 print 'Yes, the DB exists'
4 else
5 print 'No, need a new one?'
6
7 --
新建一個數據庫 8 create database TestDB on
9 (
10 name = 'TestData',
11 filename = 'G:\DBS\KeyTest.mdf',
12 size = 3,
13 filegrowth = 2
14 )
15 log on
16 (
17 name = 'TestLog',
18 filename = 'G:\DBS\KeyTest.ldf',
19 size = 3,
20 filegrowth = 10
21 )
22
23 --drop database TestDB
24
25 use TestDB
26 go
27
28 --新建一個表 29 create table [Scores]
30 (
31 [ID] int identity(1,1) primary key,
32 [Student] varchar(20) ,
33 [Subject] varchar(30),
34 [Score] float
35 )
36
37 --drop table [Scores] 38
39 --修改表中的一列 40 alter table Scores alter column [Student] varchar(20) not
null
41
42 --新增一列 43 alter table Scores add Birthday datetime
44
45 --刪除一列 46 alter table Scores drop column Birthday
47
48 --往表中插入單條資料,方法1:帶列名 49 insert into Scores(Student,Subject,Score)
50 values('張三','語文','90')
51
52 --往表中插入單條資料,方法2:不帶列名,但要求值的型別要和列欄位型別對應 53 insert into Scores
54 values('張三','英語','95')
55
56 --插入多條資料:用union或者union all 57 insert into Scores(Student,Subject,Score)
58 select '李四','語文','89'
59 union all
60 select '李四','英語','78'
61
62 --刪除表中資料,沒有條件時,刪除所有 63 delete from Scores where ID in(7,8)
64
65 --修改表中資料 66 update Scores
67 set Student='王五',Score='94'
68 where ID=10
69
70 --檢視資料 71 select * from Scores
72
73 --查看錶中最大的identity值 74 select @@identity
75
76 --或者利用dbcc命令查看錶中最大的identity值 77 dbcc checkident('Scores',noreseed)
78
79 --建立檢視,全部省略檢視的屬性列名,由子查詢目標列的欄位組成 80 create view StudentView
81 as
82 select Student,Subject,Score
83 from Scores
84
85 --加上with check option,以後對檢視的操作(增,改,刪,查)都會自動加上where ID>3 86 /* 87 create view StudentView
88 as
89 select Student,Subject,Score
90 from Scores
91 where ID>3
92 with check option
93 */
94
95 --建立檢視,全部定義屬性列名,需要定義列名的情況: 96 ----某個目標列(子查詢)不是單純的屬性列,而是聚集函式或列表達式 97 ----多表連線時選出了幾個同名列 98 ----需要在檢視中為某個列啟用新的更合適的名字 99 create view IS_Student(Student,Subject,MaxScore)
100 as
101 select Student,Subject,Score
102 from Scores
103 where Score=(select max(Score) from Scores)
104
105
106 --查詢檢視,和基本表完全樣,只不過如果檢視中有with check option,會自動加上那個條件107 select *
108 from StudentView
109
110 --查詢自定義列名的檢視111 select *
112 from IS_Student
113
114 --對檢視的insert/delete/update,和對基本表的操作一樣,並且最終都是用RDBMS自動轉換為對基本表的更新115 --並不是所有的檢視都是可更新的,因為有些檢視的更新不能有意義的轉換成對相應基本表的更新116
117 --刪除檢視118 drop view StudentView
複製程式碼

第二部分,這次練習的主題。

【一】行轉列

1,查詢原始的資料

/***這次練習的主題,行轉列,列轉行***/
select * from Scores

2,得到姓名,通過group by

select Student as '姓名'
from Scores
group by Student
order by Student

3,再加上max, case……when

複製程式碼
select Student as '姓名',
max(case Subject when '語文' then Score else 0 end) as '語文' ,--如果這個行是“語文”,就選此行作為列max(case Subject when '英語' then Score else 0 end ) as '英語'
from Scores
group by Student
order by Student
複製程式碼

檢視其它資料時,看到另外一種方法,用pivot

複製程式碼
--group by, avg/max, pivot。這裡用max和avg,結果都一樣,有什麼區別嗎?有點不明白
--參考網上的資料,用法如下
/*
pivot(
  聚合函式(要轉成列值的列名)
  for 要轉換的列
  in(目標列名)
  )
*/
select Student as '姓名',
avg(語文) as '語文',
avg(英語) as '英語'
from Scores
pivot(
avg(Score) for Subject
in (語文,英語)
)as NewScores
group by Student
order by Student asc
複製程式碼

相關推薦

SQL語句行列轉換附帶資料庫檢視操作

本來只是想解決怎麼把資料的行和列進行轉換的,但最近覺得一些資料庫SQL語句的操作,很久沒用了,有點陌生。所以也就隨筆記錄一些簡單但很基本的操作。 我的資料庫是MSSQL2005. 第一部分主要的操作包含:資料庫的建立、刪除,表的增、刪、改,表中資料的增、刪、改、查,檢

ibatis/mybatis出現 sql 語句 where in引數1,引數2……引數1000 超過1000個引數時候的解決方案

公司專案出現bug,查詢後是由於sql 語句in()內參數查過1000引起的 由於專案比較大,無法輕易修改或重構。 公司框架比較老用了ibates  無法從xml配置裡進行修改。所以本人寫了段程式碼

快速解決PL/SQL Developer過期問題無需註冊碼等復雜操作

round edit develop ati 點擊 路徑 software mat 快速 第一步:在開始菜單中輸入 :regedit 的指令,點擊回車,進入註冊表編輯器界面 第二步:在註冊表裏按HKEY_CURRENT_USER\Software\Allround Aut

sql語句常用功能null值轉換為0

span stock left coalesce 產品 post and 客戶 sel COALESCE(規格,‘ ‘) 或者 COALESCE(規格,0) select * from ( SELECT p2.name_template 產品, p3.pname 材料

sql語句的備份匯入匯出

----------匯出----------- #結構+資料 mysqldump -u 使用者名稱 -p 密碼 資料庫名稱>匯出檔案路徑 #結構 mysqldump -u 使用者名稱 -p 密碼 -d 資料庫名稱>匯出檔案路徑   ----------匯入-----

sql資料庫增刪查改練習大集合【附帶資料庫語句

建表語句:CREATE TABLE `tb_user_t2` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '編號', `name` varchar(20) DEFAULT NULL COMMENT '姓名', `s

資料庫sql語句筆試題--包含建立資料庫插入記錄查詢等操作

資料庫筆試題,包含建立資料庫、表、插入記錄、查詢等操作。1.建立資料庫。要求用SQL語句建立滿足如下要求的資料庫:(1)資料庫名稱為School; (2)主資料檔案:邏輯名為SchoolData,檔名為“D:\School\SchoolData.mdf”,檔案初始大小為50

SQL語句判斷資料庫欄位是否存在

一、資料庫 (1)查詢系統中-->存放所有資料庫資訊的資訊表(sysdatabases) 語句:  select * from master.dbo.sysdatabases   where n

『ORACLE』 SQL語句簡單應用11g

union times truncate sql語句 默認值 位數 lib rownum dual 排序 後加 nulls last 在降序排列中把null放在最後 select to_char(sysdate,‘q‘) from dual; dual

『ORACLE』 SQL語句簡單應用11g

應用 11g sql cal foreign ora 每次 int pri not null 非空 字段+not null unique 唯一 primary key 主鍵(確保數據不能重復) foreign key 外鍵 check 必須

[Oracle]行列轉換行合並與拆分

csdn employee .net title case color trac 數據轉換 con 使用wmsys.wm_concat 實現行合並在 Oracle 中, 將某一個欄位的多行數據轉換成使用逗號風格的一行顯示。能夠使用函數 wmsys.wm_concat

SQL語句小tips持續更新

區分大小寫 day col lec pre block mys strong code 統計非法數據 判斷people_id是否是32為字母組成的,統計不滿足要求的數據 SELECT COUNT(IF(BINARY people_id NOT REGEXP ‘^[0

Sql行列轉換

serve server .com unpivot 新的 nbsp div code image 創建表scores 一、傳統的行列轉換 縱表轉橫表 我們要轉成的橫表是這樣子的: pivot是sql server 2005 提供的運算符,所以只要數據庫在05版本以上

複雜SQL語句的書寫mybatis中XML檔案的核心

select sd.name as dptName, pro.`name` as provinceName, c.`name` as cityName, a.`name` as areaName, info.id, dpt.*, info.*, gd.*

CockroachDB SQL開發基礎 ——建立資料庫檢視

       CockroachDB相容PostgreSQL協議和PostgreSQL語法,它的目標是提供對ANSI SQL標準的相容,在相容標準的前提下進行了一定程度的擴充套件。從客戶端的角度看,我們可以把CockroachDB當作一個儲存容量和計算能力可以

常用SQL函式字串分隔轉自增長轉編號

字串分隔轉表 -- ============================================= -- Author: -- Create date: -- Description: 分割字串 -- =====================================

mybatis原始碼-Mapper解析之SQL 語句節點解析一條語句對應一個MappedStatement)

一起學 mybatis 你想不想來學習 mybatis? 學習其使用和原始碼呢?那麼, 在部落格園關注我吧!! 我自己打算把這個原始碼系列更新完畢, 同時會更新相應的註釋。快去 star 吧!! mybatis最新原始碼和註釋 在 mybatis 中, 對應 CRUD 的是四種節點: <

Sql 查詢庫列名的語句

  查詢庫名 Select Name FROM Master..SysDatabases order by Name 查詢News庫的所有表名 Select Name from News..sysobjects where xtype='u' order by name 查詢T_News

SQL 使用總結六改善資料庫效能

  1、SQL語句調整是優化生產SQL語句的過程,從而以最有效和最高效的方式獲取結果。首先是查詢裡元素的基本安排,因為簡單的格式化過程就能夠在語句優化中發揮很大作用。   2、資料庫調整和SQL語句調整的區別    &nbs

Mysql 8.0 第13章 SQL語句的語法 第2節

文章目錄 13.2 資料操作語句(DML) 13.2.1 CALL語法 13.2.2 DELETE語法 13.2.2.1 單表語法 13.2.2.2 多表語法 13.2.2.3 相關介紹