常见sql 写法总结

  1. 关于如何获取1对多数据中最大条数据的写法

    例子: 

      LEFT JOIN ( SELECT *

FROM table AS n1
WHERE 
n1.ID IN
(
  SELECT MAX(id) FROM table AS n2 GROUP BY n2.House_ID
)
) ne ON ne.House_ID = C.Null1

    通过两层的嵌套,group by 分组获取最大值,然后通过 in 方法来查询其他信息

 

2、查询是否有断的ID

 

SELECT * FROM 
dbo.table  AS a
WHERE a.ID+1
NOT IN
(
SELECT b.ID FROM dbo.table  AS b

 

3、上下两条数据合成一条带时间的数据

 

SELECT DISTINCT ISNULL(fybl2.ZYRQ,'1900-01-01') AS ZYRQ1,fybl1.* FROM T_FYBL AS fybl1
LEFT JOIN dbo.T_FYBL AS fybl2 ON fybl1.YJ_ID=fybl2.YJ_ID AND fybl1.ID>fybl2.ID AND fybl1.JSM=fybl2.JSM

 

4、空值,null值,0值,0.0值等筛选处理

or ISNULL(AC.CommissionAmount,'0') NOT IN('','0','0.00')

 

5、获取系统数据字典:

--表描述
SELECT tbs.name 表名,ds.value 描述
FROM sys.extended_properties ds
LEFT JOIN sysobjects tbs ON ds.major_id=tbs.id
WHERE ds.minor_id=0 AND tbs.type='U'

--快速查看表结构

--表描述
--SELECT tbs.name 表名,ds.value 描述
--FROM sys.extended_properties ds
--LEFT JOIN sysobjects tbs ON ds.major_id=tbs.id
--WHERE ds.minor_id=0 AND tbs.type='U'

--快速查看表结构
SELECT CASE WHEN col.colorder = 1 THEN obj.name
ELSE ''
END AS 表名 ,
CASE WHEN col.colorder = 1 THEN ISNULL(epTwo.[value], '')
ELSE ''
END AS 表说明 ,
col.colorder AS 序号 ,
col.name AS 列名 ,
ISNULL(ep.[value], '') AS 列说明 ,
t.name AS 数据类型 ,
col.length AS 长度 ,
ISNULL(COLUMNPROPERTY(col.id, col.name, 'Scale'), 0) AS 小数位数 ,
CASE WHEN COLUMNPROPERTY(col.id, col.name, 'IsIdentity') = 1 THEN '√'
ELSE ''
END AS 标识 ,
CASE WHEN EXISTS ( SELECT 1
FROM dbo.sysindexes si
INNER JOIN dbo.sysindexkeys sik ON si.id = sik.id
AND si.indid = sik.indid
INNER JOIN dbo.syscolumns sc ON sc.id = sik.id
AND sc.colid = sik.colid
INNER JOIN dbo.sysobjects so ON so.name = si.name
AND so.xtype = 'PK'
WHERE sc.id = col.id
AND sc.colid = col.colid ) THEN '√'
ELSE ''
END AS 主键 ,
CASE WHEN col.isnullable = 1 THEN '√'
ELSE ''
END AS 允许空 ,
ISNULL(comm.text, '') AS 默认值
FROM dbo.syscolumns col
LEFT JOIN dbo.systypes t ON col.xtype = t.xusertype
INNER JOIN dbo.sysobjects obj ON col.id = obj.id
AND obj.xtype = 'U'
AND obj.status >= 0
LEFT JOIN dbo.syscomments comm ON col.cdefault = comm.id
LEFT JOIN sys.extended_properties ep ON col.id = ep.major_id
AND col.colid = ep.minor_id
AND ep.name = 'MS_Description'
LEFT JOIN sys.extended_properties epTwo ON obj.id = epTwo.major_id
AND epTwo.minor_id = 0
AND epTwo.name = 'MS_Description'

where charindex('T_',obj.name)>0
ORDER BY obj.name;

posted @ 2017-06-16 16:57  ransom  阅读(283)  评论(0编辑  收藏  举报