SQL語句行列轉換(附帶資料庫、表、檢視操作)
本來只是想解決怎麼把資料的行和列進行轉換的,但最近覺得一些資料庫SQL語句的操作,很久沒用了,有點陌生。所以也就隨筆記錄一些簡單但很基本的操作。
我的資料庫是MSSQL2005.
第一部分主要的操作包含:資料庫的建立、刪除,表的增、刪、改,表中資料的增、刪、改、查,檢視的操作。
![複製程式碼](http://common.cnblogs.com/images/copycode.gif)
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 TestDB24
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) notnull
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
![複製程式碼](http://common.cnblogs.com/images/copycode.gif)
第二部分,這次練習的主題。
【一】行轉列
1,查詢原始的資料
/***這次練習的主題,行轉列,列轉行***/
select * from Scores
2,得到姓名,通過group by
select Student as '姓名'
from Scores
group by Student
order by Student
3,再加上max, case……when
![複製程式碼](http://common.cnblogs.com/images/copycode.gif)
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
![複製程式碼](http://common.cnblogs.com/images/copycode.gif)
檢視其它資料時,看到另外一種方法,用pivot
![複製程式碼](http://common.cnblogs.com/images/copycode.gif)
--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
![複製程式碼](http://common.cnblogs.com/images/copycode.gif)
相關推薦
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 相關介紹