sqlserver 语句记录

SQLServer 显示从第 @bgn 行的数据共 @num 行

根据某字段排序,形成 row 列,以 row 列为为条件任意显示所需行数的记录

1
2
3
4
5
6
7
8
9
10
11
12
SELECT TOP (@num) *
FROM (SELECT *,
Row_number()
OVER (
ORDER BY 户名) AS row
FROM tb_red_dw) a
WHERE row >= @bgn
AND ( [证件号码] LIKE '%' + @id_no + '%'
AND [户名] LIKE '%' + @acc_name + '%'
AND [法人代表] LIKE '%' + @fr_name + '%'
AND [法人代表证件号] LIKE '%' + @fr_id + '%'
AND [涉案批次] LIKE '%' + @sapc + '%' )

参数参与条件的写法

方法一、一般可用 case 条件语句,但因 case 后的 then 只能为常量,不能是表达式,有时无法写出

方法二、将参数条件与符合参数条件描述的其他条件写在一起,更通用些

如参数 @state,1 正常状态(撤销日期字段为空),9 全部(撤销日期字段可为空也可不为空)

select * from tb_rhzh_gr where (@state=’1’ and 撤销日期 is null or @state=’9’)

短期内拥有账户的个数(outer apply)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT a.*,
--a.身份序号,
--法定代表人或负责人身份证件编号,
--a.账号,
--a.开户日期,
ff.短期账户数量
--INTO #tmp_all
FROM #tmp A
OUTER APPLY (SELECT Count(*) 短期账户数量,count(distinct 电话) 电话数量
FROM #tmp B
WHERE a.身份序号 = b.身份序号
AND Abs(Datediff(day, CONVERT(DATE, a.开户日期), CONVERT(DATE, 开户日期))) <= @days) AS FF
ORDER BY 身份序号,
开户日期