
练习
sql练习
吉普赛的歌
这个作者很懒,什么都没留下…
展开
-
有点意思,用前3列生成第4列
USE tempdbGOIF OBJECT_ID('dbo.[t]') IS NOT NULL DROP TABLE dbo.[t]GOCREATE TABLE dbo.[t]([c1] VARCHAR(10),[c2] INT,[c3] VARCHAR(50) )GOSET NOCOUNT ONINSERT INTO dbo.[t] VALUES(N'A',N'1',N'A,B,C')INSERT INTO dbo.[t] VALUES(N'B',N'2',N'A,B')I.原创 2021-10-11 21:43:29 · 150 阅读 · 0 评论 -
年月日星期 对照表
--年月日星期 对照表IF OBJECT_ID('DimDateStartWithMonday') IS NOT NULL DROP TABLE DimDateStartWithMondayGOCREATE TABLE DimDateStartWithMonday( DateKey INT PRIMARY KEY, FullDate DATE NOT NULL, [DateName] NVARCHAR(20).原创 2021-04-17 14:15:02 · 688 阅读 · 0 评论 -
用索引视图实现大表的快速更新
原贴:点击打开链接USE tempdbGOIF OBJECT_ID('view_test') IS NOT NULL DROP VIEW view_testGOIF OBJECT_ID('father') IS NOT NULL DROP TABLE fatherIF OBJECT_ID('sub') IS NOT NULL DROP TABLE subGOCREATE TABLE...原创 2018-06-12 17:42:27 · 781 阅读 · 0 评论 -
不要中间变量互换字符串的内容
DECLARE @a VARCHAR(10)='aa',@b VARCHAR(10)='b'SET @a+=@b;SET @b=LEFT(@a,LEN(@a)-LEN(@b))SET @a=RIGHT(@a,LEN(@a)-LEN(@b))SELECT @a AS aValue ,@b AS bValue原创 2018-05-24 15:57:42 · 391 阅读 · 0 评论 -
相邻的记录只保留一个
--相邻的记录只保留一个USE tempdbGOIF OBJECT_ID('tb1') IS NOT NULL DROP TABLE tb1GOCREATE TABLE tb1( n NVARCHAR(10) )GOINSERT INTO tb1 VALUES (1),(1),(2),(3),(3),(1),(1);WITH t AS ( SELECT ROW_NUMBER...原创 2018-04-09 10:18:57 · 211 阅读 · 0 评论 -
获取某个表的写插入语句时最少需要的列名脚本
--获取某个表插入时必须要的字段DECLARE @tableName NVARCHAR(200)SET @tableName='BuyApply' --替换实际表名;WITH cte AS (SELECT c.name AS colName FROM sys.columns c WHERE c.[object_id]=OBJECT_ID(@tableName)AND c.is_null原创 2018-03-05 15:04:35 · 257 阅读 · 0 评论 -
设计属性不固定的表
相关贴子:点击打开链接--1. 材料表--2. 产品表--3. 产品材料中间表--4. 属性表--5. 材料属性中间表USE tempdbGOIF OBJECT_ID('material_data') IS NOT NULL DROP TABLE material_dataIF OBJECT_ID('product_data') IS NOT NULL DROP TABLE p原创 2018-03-02 16:57:53 · 4180 阅读 · 0 评论 -
实现子查询排序
USE tempdbGOIF OBJECT_ID('t') IS NOT NULLDROP TABLE tGOCREATE TABLE t(id INT,[time] DATETIME,num1 INT)INSERT INTO tSELECT 9,'2018-02-09 15:55:40',3UNION ALL SELECT 8,'2018-02-08 15:55:26',1UN原创 2018-02-26 16:22:34 · 1069 阅读 · 7 评论 -
求两表中重复的记录
USE tempdbGOIF OBJECT_ID('t1') IS NOT NULL DROP TABLE t1IF OBJECT_ID('t2') IS NOT NULL DROP TABLE t2GOCREATE TABLE t1(uno VARCHAR(20),uname NVARCHAR(20))CREATE TABLE t2(uno VARCHAR(20),uname NVA原创 2018-01-18 10:55:57 · 240 阅读 · 0 评论 -
创建索引视图来判断是否存在重复
USE tempdbGOIF OBJECT_ID('v_t') IS NOT NULL DROP VIEW v_t;IF OBJECT_ID('t') IS NOT NULL DROP TABLE t;GOCREATE TABLE t(id INT IDENTITY(1,1) PRIMARY KEY,n NVARCHAR(20) )INSERT INTO t(n)VALUES(原创 2018-01-30 16:59:58 · 300 阅读 · 0 评论 -
在多个库上批量创建触发器
-------- 创建测试库及测试表 ----------USE [master]GO--创建测试库IF EXISTS(SELECT 1 FROM sys.databases AS d WHERE d.name='db1') DROP DATABASE db1GOIF EXISTS(SELECT 1 FROM sys.databases AS d WHERE d.name='db2'原创 2017-12-28 09:38:52 · 768 阅读 · 0 评论 -
获取除主键之外的列
USE tempdbGOIF OBJECT_ID('t') IS NOT NULL DROP TABLE tGOCREATE TABLE t( id INT IDENTITY(1,1) PRIMARY KEY, c1 INT, c2 int )GODECLARE @sql NVARCHAR(MAX)SELECT @sql=STUFF( ( SELECT ','+c.n...原创 2018-05-30 09:36:36 · 657 阅读 · 0 评论 -
mysql 30分钟分一段统计记录
drop table if exists t;CREATE TABLE t ( id int NOT NULL AUTO_INCREMENT, `d` datetime NOT NULL, PRIMARY KEY (`id`));INSERT t (d) values('2018-08-09 18:06');INSERT t (d) values('2018-08-09 20...原创 2018-08-09 21:50:12 · 1250 阅读 · 0 评论 -
行列转置
USE tempdbGOIF OBJECT_ID('t') IS NOT NULL DROP TABLE tGOCREATE TABLE t( id INT IDENTITY(1,1) PRIMARY KEY, buyer NVARCHAR(10), goods NVARCHAR(10))GOINSERT INTO t VALUES ('A商','橘子')INSERT IN...原创 2018-08-15 13:55:52 · 440 阅读 · 0 评论 -
间断与孤岛应用:求连续签到天数
原贴: https://bbs.youkuaiyun.com/topics/392489035?page=1#post-403595581USE tempdbGOIF OBJECT_ID('t') IS NOT NULL DROP TABLE tGOCREATE TABLE t( id INT IDENTITY(1,1) PRIMARY KEY, [name] NVARCHAR(10) N...原创 2018-12-06 13:00:50 · 747 阅读 · 0 评论 -
树形排序
USE tempdbGOIF OBJECT_ID('dbo.[t]') IS NOT NULL DROP TABLE dbo.[t]GOCREATE TABLE dbo.[t]([id] NVARCHAR(MAX),[areaname] NVARCHAR(MAX),[postcode] NVARCHAR(MAX),[iParent] NVARCHAR(MAX) )GOS...原创 2018-11-19 21:53:41 · 758 阅读 · 0 评论 -
动态获取列名,行列转置
USE tempdbGOIF OBJECT_ID('Student') IS NOT NULL DROP TABLE StudentIF OBJECT_ID('Course') IS NOT NULL DROP TABLE CourseIF OBJECT_ID('Scores') IS NOT NULL DROP TABLE ScoresGOCREATE TABLE Student(...原创 2018-11-19 21:52:25 · 641 阅读 · 1 评论 -
\b切字符串 只保留数字、字母
USE tempdbGOIF OBJECT_ID('t') IS NOT NULL DROP TABLE tGOCREATE TABLE t( id VARCHAR(50) PRIMARY KEY, uname NVARCHAR(20) )GOINSERT INTO t VALUES ('2018041A1243HS001','a')INSERT INTO t VALUES ...原创 2018-11-13 16:22:35 · 789 阅读 · 0 评论 -
不同列获取等级数量
相关贴子:https://bbs.youkuaiyun.com/topics/392472876 USE tempdbGOIF OBJECT_ID('t') IS NOT NULL DROP TABLE tGOCREATE TABLE t( ID INT ,姓名 NVARCHAR(10) ,语文 NVARCHAR(10) ,数学 NVARCHAR(10) ,物理 NVARCHAR(10...原创 2018-11-05 21:25:27 · 259 阅读 · 0 评论 -
求某个节点下所有的子节点,但要求保留原节点名称
USE tempdbGO--测试数据if not object_id(N'Employee') is null drop table EmployeeGoCreate table Employee([EId] nvarchar(23),[Name] nvarchar(23),[Sex] nvarchar(21),[Depart] int)Insert Employeesel...原创 2018-11-12 21:58:34 · 322 阅读 · 0 评论 -
SQL Server: 所有库、所有表、所有列查询值
EXEC sp_MSforeachdb 'if "?" not in (''master'',''tempdb'',''model'',''msdb'',''distribution'') BEGINDECLARE @search NVARCHAR(200),@sql NVARCHAR(MAX)SET @search=''广东'' --自己修改DECLARE @t TABLE ( ...原创 2018-09-20 11:00:48 · 697 阅读 · 0 评论 -
主表带动副表一起分页
相关贴子: https://bbs.youkuaiyun.com/topics/392447008 use tempdbgoIF Object_ID('mainT') is not null drop table mainTIF Object_ID('subT') is not null drop table subTgoCREATE TABLE mainT( id INT IDENTITY...原创 2018-09-13 09:20:42 · 446 阅读 · 0 评论 -
复合枚举在SQL Server中的应用
相关贴子:https://bbs.youkuaiyun.com/topics/392439957状态字段,一般是单纯的,但如果有复合的状态怎么办?比如考勤,一个人一天之中,既有迟到,又有早退,那如何设计这个状态字段?用户考勤,共 6种状态:--userState:--1 出勤 1--2 请假 10--4 公差 100--8 迟到 ...原创 2018-09-02 11:14:27 · 1667 阅读 · 3 评论 -
用 sp_getapplock 实现串行执行的存储过程
USE tempdbGOIF OBJECT_ID('t') IS NOT NULL DROP TABLE tGOCREATE TABLE t(addTime DATETIME2)GOIF OBJECT_ID('proc_test') IS NOT NULL DROP PROC proc_testGOCREATE PROC proc_testASBEGIN SET NOCOUN原创 2017-12-26 16:13:57 · 2793 阅读 · 1 评论 -
SQL Server2005实现累加
原贴:点击打开链接--注:需要 SQL Server2012 或以上版本才能运行USE tempdbGOIF OBJECT_ID('t') IS NOT NULLDROP TABLE tGOCREATE TABLE t( 月份 int ,投资代码 NVARCHAR(20) ,利息收益日期 datetime ,利息收益 int)GOIN原创 2017-12-05 21:10:30 · 379 阅读 · 0 评论 -
限定某个用户不能delete,drop,truncate某个表
-------------- 测试表 Begin ------------------这里的测试库为 tempdb--弄清楚之后,修改相关代码,再上正式生产环境操作USE tempdbGOIF EXISTS(SELECT * FROM sys.triggers AS t WHERE t.name='TR_Safety_Table')BEGIN DROP TRIGGER TR_Safe原创 2017-12-05 15:14:49 · 1179 阅读 · 0 评论 -
利用 SUM OVER 开窗函数实现累加计算
今天在坛子里发现一个很有意思的贴子: 点击打开链接如上图所示,【需求数量】不变,【已满足数量】按照从序号大到小的顺序,从最小的【序号】中取值,使其等于【需求数量】举个例子:比如物料号为1的,有三条记录:分别是序号1、3、4,序号4的【已满足数量】比【需求数量】少了1,则从序号1【已满足数量】中取出1 给序号4,序号1的【已满足数量】变为11,序号4的【已满足数量】变为5;2、序原创 2017-09-02 22:46:19 · 10627 阅读 · 0 评论 -
drop 和 truncate 再 drop 两种删除表的方式对比评测
USE [master]GO--1. 创建测试库CREATE DATABASE [test] CONTAINMENT = NONE ON PRIMARY ( NAME = N'test', FILENAME = N'D:\database\2014\test.mdf' , SIZE = 8192KB , FILEGROWTH = 8192KB ) LOG ON ( NAME =原创 2017-09-19 16:51:31 · 1574 阅读 · 0 评论 -
错动分组并求平均值
原贴:点击打开链接如何实现查询29条记录然后分别使用1-6条的记录,取平均值对应一个值,2-7条记录对应一个值,3-8等等这样的规律一直取24个值。也就是最后取到24-29条记录平均后的值,。求分享-------------------- 构建测试表和测试数据 BEGIN -------------------------之所以长是因为需要构建一批随机记录,如果你有现成的表可以省去这原创 2017-09-19 10:53:59 · 536 阅读 · 0 评论 -
挑选出只依赖表的视图, 并得到相应的创建脚本
---------------- 测试表及视图 BEGIN ----------------USE tempdbGOIF OBJECT_ID('dbo.t') IS NOT NULLDROP TABLE dbo.tGOCREATE TABLE dbo.t(id INT PRIMARY KEY,userName NVARCHAR(20))GOIF OBJECT_ID('dbo.vie原创 2017-09-15 22:18:57 · 379 阅读 · 0 评论 -
对比两个表名不同但列名相同的表的列的类型与长度
USE tempdbGOIF OBJECT_ID('t1') IS NOT NULL DROP TABLE t1IF OBJECT_ID('t2') IS NOT NULL DROP TABLE t2CREATE TABLE t1(c1 INT,c2 NVARCHAR(60))CREATE TABLE t2(c1 INT,c2 VARCHAR(50));WITH cte AS (S原创 2017-09-13 23:06:20 · 1029 阅读 · 0 评论 -
创建一个将某个数分配为多少份的随机数的表值函数
--1. 创建随机视图 view_randif object_id('view_rand') is not nullbegin drop view view_randendgocreate view view_randas select rand() as [r]GO--2. 创建随机分割的表值函数IF OBJECT_ID('dbo.Fun_Random') IS NOT原创 2017-09-13 22:43:10 · 709 阅读 · 0 评论 -
求出一个表前面多少条记录的金额相加大于等于指定的值
DECLARE @t TABLE ( id INT PRIMARY KEY, n INT)INSERT INTO @t (id,n) VALUES (2,10),(3,12),(5,13),(7,14),(8,15)SELECT * FROM @tDECLARE @v INTSET @v = 30;WITH t AS(SELECT ROW_NUMBER() OVER (ORDE原创 2016-05-23 15:36:43 · 959 阅读 · 0 评论 -
分段分组
DECLARE @tmp TABLE (id INT,plate VARCHAR(20),time DATETIME,speed INT)INSERT INTO @tmp(id,plate,TIME,speed) VALUES(4,'武装巡逻01','2014-11-05 14:29:06.000',0)INSERT INTO @tmp(id,plate,TIME,speed) VALUES(原创 2016-01-27 13:59:45 · 549 阅读 · 0 评论 -
如何切分id串并得到name串
DECLARE @user TABLE( userId BIGINT, userName NVARCHAR(20), positionIds VARCHAR(1000))DECLARE @position TABLE ( positionId BIGINT, positionName NVARCHAR(20))SET NOCOUNT ONINSERT INTO @user (u原创 2016-01-27 13:52:24 · 708 阅读 · 0 评论 -
SQL练习题
原题:点击打开链接题目是人家的, 答案是自己做的。SET NOCOUNT ONCREATE TABLE STUDENT( SNO VARCHAR(3) NOT NULL, SNAME VARCHAR(4) NOT NULL, SSEX VARCHAR(2) NOT NULL, SBIRTHDAY DATETIME, CLASS VARCHAR(5))goCR...原创 2014-03-06 13:58:17 · 1765 阅读 · 0 评论 -
一些有趣的SQL题目
题目来自: 点击打开链接下面是本人的答案:--一下语句中用到的表tb均指这个测试表--1、你猜下面这条语句能得到什么结果,这个很常用if object_id('tb') is not nulldrop table tbgo select getdate()create table tb(id int identity ,name varchar(10))insert into原创 2017-09-20 10:29:47 · 1830 阅读 · 0 评论 -
2017年7月最新全国行政规划数据库
-- ------------------------------ Table structure for sys_area_2017-- ----------------------------IF OBJECT_ID('sys_area_2017') IS NOT NULLDROP TABLE sys_area_2017GO--全国行政区划-省市县三级(2017版)CREATE原创 2017-09-22 16:32:21 · 2488 阅读 · 0 评论 -
统计两表时间段重复部分
原贴:点击打开链接USE tempdbGOIF OBJECT_ID('dbo.a') IS NOT NULL DROP TABLE dbo.aIF OBJECT_ID('dbo.b') IS NOT NULL DROP TABLE dbo.bCREATE TABLE a(deviceId INT ,beginTime TIME,endTime TIME)CREATE TABLE b(原创 2017-11-21 16:19:31 · 337 阅读 · 0 评论 -
两列去重复记录
原贴:点击打开链接USE tempdbGOIF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #tempcreate table #temp(name1 varchar(10),name2 varchar(10),cnt int)SET NOCOUNT ONinsert into #temp values('A','B',原创 2017-11-14 13:31:41 · 306 阅读 · 0 评论