CASE

,D.[Score] B_Score
,'Distince'=
CASE
WHEN C.Score > D.Score THEN C.[Score] - D.[Score]
WHEN C.Score < D.Score THEN D.[Score] - C.[Score]
ELSE 0
END
FROM [tbiz_AssScoreAction] C
INNER JOIN [tbiz_AssScoreAction] D
ON C.QuestionID =D.QuestionID AND (C.RelationID -30) = D.RelationID
WHERE C.RelationID=30 AND C.ProjectID=65 AND C.PersonID=2430
--等价语法
,D.[Score] - C.Score Ta_Zi
,CASE
WHEN C.[Score] > D.[Score] THEN C.[Score] - D.[Score]
WHEN C.[Score] < D.[Score] THEN D.[Score] - C.[Score]
ELSE 0
END AS Distince

CASE 判断 NULL的情况

CASE WHEN [ReadState] IS NULL OR [ReadState]=0  THEN '未读' ELSE '已读'  END AS ReadStateName
SELECT CASE Type_No
WHEN 2 THEN Customer_No
WHEN 4 THEN Customer_No
WHEN 10 THEN Customer_No
WHEN 11 THEN Customer_No
WHEN 3 THEN Organization_Name
WHEN 5 THEN Organization_Name
END AS Customer_No
FROM [Lx_Finance_Transfer_ForNC]

SELECT
A.TESTID,
A.SCALEID,
B.NAME,
B.COUNT,
B.ASSTIME,
A.STATE,
CASE
WHEN A.MATCH IS NULL THEN
0 ELSE CAST (A.MATCH AS NUMERIC ( 26, 2 ))
END AS MATCH
FROM
TD_TEST_INFO A
JOIN ASS_SCALE B ON A.SCALEID= B.SCALEID

JOIN

SELECT T.Id,T.pingZhengNum FROM Lx_Finance_Transfer_ForNC T
LEFT JOIN Lx_Finance_Flow_ForNC F ON T.Id=F.PingZhengId

LEFT JOIN

解读:尽管主档表T只有1条记录,但是在分档表中有2条记录与之关联,所以SELECT结果集有2条.

SELECT T.Id T_Id,T.pingZhengNum,F.* FROM Lx_Finance_Transfer_ForNC T
INNER JOIN Lx_Finance_Flow_ForNC F ON T.Id=F.PingZhengId
-- 效果和LEFT JOIN 一样

RIGHT JOIN

解读:T表从RIGHT链接F表,SQL引擎会保留F表中所有记录

自连接

SELECT  A.* ,
B.RelationName ,
B.Score T_Score ,
B.ID T_ID
FROM [tbiz_AssScoreWeidu] A
INNER JOIN [tbiz_AssScoreWeidu] B
ON A.WeiduNo = B.WeiduNo AND A.RelationID = B.RelationID + 30
WHERE A.ProjectID = 65
AND A.PersonID = 2430
AND ( A.RelationID = 30 OR B.RelationID = 0 )
AND A.WeiduNo = 'C211-13'

自链接+WHERE条件

SELECT  A.DictItemID ,
B.ItemName ParentItemName ,
A.ItemType ,
A.ItemName ,
A.ItemCode ,
A.CreatedBy ,
A.IsDelete
FROM tcfg_DictItem A
LEFT JOIN tcfg_DictItem B ON B.DictItemID = A.ParentID
WHERE A.ParentID != 0

一对多关系JOIN一行

SELECT *
FROM (
SELECT A.Id
,A.PingZhengNum
,A.CRT_Date
,A.[Enabled]
,B.Id FlowId
,B.Type_No_Name
,B.VouchType
,ROW_NUMBER() OVER
(
PARTITION BY A.Id
ORDER BY B.CRT_Date
)
AS rn
FROM [Lx_Finance_Transfer_ForNC] A LEFT OUTER JOIN dbo.Lx_Finance_Flow_ForNC B
ON A.Id=B.PingZhengId
) m
WHERE rn=1

解读:主档表记录多,分档表记录少,参考

方案二

SELECT A.Id
,A.PingZhengNum
,A.CRT_Date
,A.[Enabled]
,B.Id FlowId
,B.Type_No_Name
,B.VouchType
FROM [Lx_Finance_Transfer_ForNC] A
OUTER APPLY
(
SELECT TOP 1 *
FROM Lx_Finance_Flow_ForNC C
WHERE PingZhengId = A.Id
ORDER BY CRT_Date DESC
) B

ROW_NUMBER() OVER(....) AS Xxx

SELECT  [PersonID] ,
ROW_NUMBER() OVER
(
ORDER BY A.Id
) AS RowID
FROM [tbiz_AssScore] A

简单的说row_number()从1开始,为每一条"分组"记录返回一个数字,分组对应关键词PARTITION BY XXX,为可选关键词

当出现GROUP BY 子句时,GROUP BY会影响到ROW_NUMBER()中的字段,如下面的第5行

 SELECT  [PersonID] ,
AVG([Score]) AVG_Score,
ROW_NUMBER() OVER
(
ORDER BY A.PersonID
) AS RowID
FROM [tbiz_AssScore] A
GROUP BY PersonID
ORDER BY AVG_Score

PARTITION BY 子句 + ROW_NUMBER() OVER(....) AS rn

PARTITION BY 理解成"分组"

SELECT * FROM(
SELECT C.[ID]
,D.ID BID
,C.[ProjectID]
,C.[PersonID]
,C.[QuestionID]
,C.[QuestionName]
,C.[WeiduNo]
,C.[WeiduNAME]
,C.[RelationID]
,C.[RelationName]
,C.[Score]
,D.RelationName B_RelationName
,D.[Score] B_Score
,D.[Score] - C.Score Ta_Zi
,ROW_NUMBER() OVER
(
PARTITION BY D.ID,C.[ProjectID],C.[PersonID],C.[QuestionID]
ORDER BY C.[ID]
)
AS rn
FROM [tbiz_AssScoreAction] C
INNER JOIN [tbiz_AssScoreAction] D
ON C.QuestionID = D.QuestionID AND (C.RelationID -30) = D.RelationID
WHERE C.RelationID=30 AND C.ProjectID=65 AND C.PersonID=2430
) m WHERE rn = 1 ORDER BY Ta_Zi

DECLARE

DECLARE @MedicalInstitutionID VARCHAR(max) SET @MedicalInstitutionID='SYS20130228000000012'
DECLARE @ResidentCardID VARCHAR(max) SET @ResidentCardID=NULL
DECLARE @Name VARCHAR(max) SET @Name=NULL
DECLARE @InDateLeft DATETIME SET @InDateLeft=NULL
DECLARE @InDateRight DATETIME SET @InDateRight=NULL
DECLARE @AcceptsOperatorID VARCHAR(max) SET @AcceptsOperatorID=NULL
DECLARE @AcceptsOperatorName VARCHAR(max) SET @AcceptsOperatorName=NULL
DECLARE @IsPrint INT SET @IsPrint=null

SQL/T-SQL实例参考-2

SQL/T-SQL实例参考-1的更多相关文章

  1. SQL/T-SQL实例参考

    ,D.[Score] B_Score ,'Distince'= CASE WHEN C.Score > D.Score THEN C.[Score] - D.[Score] WHEN C.Sco ...

  2. SQL/T-SQL实例参考-2

    对多关联查询,查询多中的记录,但是返回一的结果集 子查询语法 --一对多关联查询,查询多中的记录,但是返回一的结果集 SELECT C.* FROM ( SELECT A.BasicID FROM [ ...

  3. SQL Server的实例恢复解析

    同Oracle一样,SQL Server在非一致性关闭的时候也会进行实例恢复(Instance Recovery),本文根据stack overflow的文章介绍一些SQL Server实例恢复的知识 ...

  4. SQL群集多实例卸载、安装

    安装SQL多实例群集: 准备工作:准备SQL群集管理员及服务账号:sqladmin和srv-sql,sqladmin和srv-sql都属于群集节点计算机的administrators组 预留群集名称账 ...

  5. SQL Server 多实例下的复制

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 搭建步骤(Procedure) 注意事项(Attention) 二.背景(Contexts) ...

  6. 在线API,桌面版,jquery,css,Android中文开发文档,JScript,SQL掌用实例

    学习帮助文档大全 jquery,css,Android中文开发文档,JScript,SQL掌用实例 http://api.jq-school.com/

  7. 当SQL Server的实例位于集群的特定节点时,数据库无法远程访问

    搭建好了一个集群环境,发现当SQL Server的实例位于集群的其中一个节点时,数据库无法远程访问,报如下错误.但在另一个 节点时,数据库访问正常. 标题: 连接到服务器 -------------- ...

  8. Delphi调用SQL分页存储过程实例

    Delphi调用SQL分页存储过程实例 (-- ::)转载▼ 标签: it 分类: Delphi相关 //-----下面是一个支持任意表的 SQL SERVER2000分页存储过程 //----分页存 ...

  9. Step7:SQL Server 多实例下的复制

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 搭建步骤(Procedure) 注意事项(Attention) 二.背景(Contexts) ...

随机推荐

  1. python导入csv文件时,出现SyntaxError

    背景 np.loadtxt()用于从文本加载数据. 文本文件中的每一行必须含有相同的数据. *** loadtxt(fname, dtype=<class 'float'>, commen ...

  2. bzoj 4559 [JLoi2016]成绩比较——拉格朗日插值

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4559 关于拉格朗日插值,可以看这些博客: https://www.cnblogs.com/E ...

  3. java中初始化方法

    本文主要是讲从<java编程思想>中看到的东西,是第七章复用类的开头内容,主要是类初始化的几种方法的位置,主要包括 1.在定义对象的地方.这意味着他们总是在构造器被调用前被初始化. 2.在 ...

  4. Azure上采用Json Template从已有的VHD创建VM

    从已有的VHD创建VM是使用Azure中经常要操作的内容. 本文将介绍如何采用Json Template从已经有的VHD创建VM. 一.准备VHD 在我的Azure账户中选择一台VM,如下图: 查看其 ...

  5. 命令"service 服务名 restart" 与 "service 服务名 reload"的区别

    由于今天用到了service nginx reload 和 service nginx restart,说说他俩的区别吧: reload:不间断服务重启,就像一张网页上面的刷新按钮一样. restar ...

  6. struts2获得需要的文件或者访问路径

    在struts2中,上传文件的时候遇到一个很好用但是失效的方法,找到如下替代.并且测试了一下request可以得到的相关路径. 得到request对象: HttpServletRequest requ ...

  7. JavaScript 中事件绑定的三种方式

    以下是在 JS 中事件绑定的三种方式.   1. HTML onclick attribute     <button type="button" id="uplo ...

  8. 杂项:UUID

    ylbtech-杂项:UUID UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部 ...

  9. Oracle Flushback 学习测试

    Oracle Flushback 学习测试:三思笔记 Flashback恢复 从9i开始,利用oracle查询的多版本一致的特点,实现从回滚段中读取一定时间内在表中操作的数据,被称为 flashbac ...

  10. arm开发板6410/2440上mjpg-streamer网络视频服务器移植

    摄像头移植 一.环境 主机环境 :ubuntu 10.10         目标板 :FS-S5PC100 主机工具链 :gcc-4.4.5         交叉工具链 :arm-unknown-li ...