1. 行列转换--普通

假设有张学生成绩表(CJ)如下
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82

想变成
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82

declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a
select @sql = @sql+' from test group by name'
exec(@sql)

2. 行列转换--合并

有表A,
id pid
1 1
1 2
1 3
2 1
2 2
3 1
如何化成表B:
id pid
 1 1,2,3
 2 1,2
 3 1

创建一个合并的函数
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(pid as varchar) from 表A where id=@id set @str=right(@str,len(@str)-1)
return(@str)
End
go

--调用自定义函数得到结果
select distinct id,dbo.fmerg(id) from 表A

3. 如何取得一个数据表的所有列名

方法如下:先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。
SQL语句如下:
declare @objid int,@objname char(40)
set @objname = 'tablename'
select @objid = id from sysobjects where id = object_id(@objname)
select 'Column_name' = name from syscolumns where id = @objid order by colid

是不是太简单了? 呵呵 不过经常用阿.

4. 通过SQL语句来更改用户的密码

修改别人的,需要sysadmin role
EXEC sp_password NULL, 'newpassword', 'User'

如果帐号为SA执行EXEC sp_password NULL, 'newpassword', sa

5. 怎么判断出一个表的哪些字段不允许为空?

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE='NO' and TABLE_NAME=tablename

6. 如何在数据库里找到含有相同字段的表?
a. 查已知列名的情况
SELECT b.name as TableName,a.name as columnname
From syscolumns a INNER JOIN sysobjects b
ON a.id=b.id
AND b.type='U'
AND a.name='你的字段名字'

b. 未知列名查所有在不同表出现过的列名
Select o.name As tablename,s1.name As columnname
From syscolumns s1, sysobjects o
Where s1.id = o.id
 And o.type = 'U'
 And Exists (
 Select 1 From syscolumns s2
 Where s1.name = s2.name
 And s1.id <> s2.id
 )

7. 查询第xxx行数据

假设id是主键:
select *
from (select top xxx * from yourtable) aa
where not exists(select 1 from (select top xxx-1 * from yourtable) bb where aa.id=bb.id)
 
如果使用游标也是可以的
fetch absolute [number] from [cursor_name]
行数为绝对行数

8. SQL Server日期计算
a. 一个月的第一天
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
b. 本周的星期一
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
c. 一年的第一天
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
d. 季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
e. 上个月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
f. 去年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
g. 本月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
h. 本月的第一个星期一
select DATEADD(wk, DATEDIFF(wk,0,
 dateadd(dd,6-datepart(day,getdate()),getdate())
 ), 0)
i. 本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。

CREATE Procedure CMRC_ProductSearch
(
    @Search nvarchar(255)
)
AS

SELECT
    ProductID,
    ModelName,
    ModelNumber,
    UnitCost,
    ProductImage

FROM
    CMRC_Products

WHERE
    ModelNumber LIKE '%' + @Search + '%'
   OR
    ModelName LIKE '%' + @Search + '%'
   OR
    Description LIKE '%' + @Search + '%'

GO

转载于:https://www.cnblogs.com/nosnowwolf/archive/2006/05/15/400758.html

SQL 和T-SQL学习(一)相关推荐

  1. Sql Server2005 Transact-SQL 新兵器学习总结之-数据类型

    sql server2005新增加了2大数据类型: 1.大值数据类型 2.xml 1.大值数据类型 Microsoft SQL Server 2005 中引入了 max 说明符.此说明符增强了 var ...

  2. 学习SQL语句之SQL语句大全

    学习SQL语句之SQL语句大全 -------------------------------------------------------------------------------- 作者: ...

  3. sql脚本导入sql_学习SQL:SQL脚本

    sql脚本导入sql I can hardly imagine making any complex database changes without using SQL scripts. We ac ...

  4. sql学习练习题_学习SQL:练习SQL查询

    sql学习练习题 Today is the day for SQL practice #1. In this series, so far, we've covered most important ...

  5. sql server 循环_学习SQL:SQL Server循环简介

    sql server 循环 Loops are one of the most basic, still very powerful concepts in programming – the sam ...

  6. 学习SQL:将SQL Server导出到Excel

    In the previous article, Learn SQL: SQL Server Pivot Tables, we've discussed how to create a report ...

  7. sql 查询手动创建的表_学习SQL:使用SQL查询手动创建报告

    sql 查询手动创建的表 In the previous two articles, we've practiced SQL queries and went through a few more e ...

  8. Sql Server2005 Transact-SQL 新兵器学习总结之-PIVOT和UNPIVOT运算符

    1.简介  PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合. UNPIVOT与PIVOT执行相反的操作,将表值表达式的列转 ...

  9. SQL零基础入门学习(四)

    SQL零基础入门学习(三) SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新记录. SQL INSERT INTO 语法 INSERT INTO 语句可以有两种编写形 ...

  10. SQL零基础入门学习(十)

    SQL零基础入门学习(九) SQL CREATE DATABASE 语句 CREATE DATABASE 语句用于创建数据库. SQL CREATE DATABASE 语法 CREATE DATABA ...

最新文章

  1. python为什么中文要encoding-python中encoding是什么意思
  2. Android 笔记一
  3. 男生的哪个“不要”是真的不要?
  4. geoserver安装(war安装+exe安装)
  5. php7 变量,PHP7变量结构分析
  6. [转载]golang sync.Pool
  7. java对菜单项的监听_我是新手,请问大神java菜单项和下拉列表添加监听和监听方法???有变量和方法就行了...
  8. python colorbar 0变白色_Python matplotlib更改超过colorbar范围的值的默认颜色
  9. debug命令_Python 必备 debug 神器:pdb
  10. JAVA Cannot find class [×××] for bean with name ‘×ב defined in class path resource [×××] 问题解决方法
  11. mysql的checkpoint
  12. eclipse 无法启动选择的项,最近未进行任何启动
  13. JAVA——电子商城三级分类目录查询-递归树形数据结构
  14. 美团到店Java二面:TCP 糊涂窗口综合症面试题汇总解析
  15. 美团开源实时监控系统 CAT 3.0 发布:多语言客户端及多项性能提升
  16. ie11启用java时打不开_ie11打不开解决方法
  17. laravel中guard是什么
  18. FRAM芯片扩展在低功率应用中的耐力
  19. 超级好用的编辑器UltraEdit
  20. linux关闭cups服务 关闭631端口 关闭avahi-daemon服务

热门文章

  1. 大数据之有指导数据挖掘方法的模型
  2. Leetcode-496-下一个更大元素 I
  3. 系统学习NLP(二十六)--BERT详解
  4. 运筹优化(十七)--存储论基础及其最优化求解
  5. 人脸检测(十六)--Cascade CNN
  6. 一种虚拟现实技术用计算机,虚拟现实技术有哪几大分类?
  7. python怎么命名未知数_怎样用Python计算含有未知数的方程式-百度经验
  8. 双链表(线性表的链式存储)---C语言版
  9. kafka事务操作案例演示
  10. swoole各种服务器初步搭建