学习Sql server 及数据库近一年,写的最大的Sql 语句
大家好,学习Sql server有一段时间了,最近一直写各种各样的语句。
这次做了两个基础表的查询视图,两个视图表的合并,并且基于两个视图表和一个聚合结果表的查询关联,用到了left join。
其中还有大量的排序,分组排序,日期转化,字符转化等,堪称大全级别了。
因此将代码记录下来,以备以后查阅或者方便他人。
SELECT
ROW_NUMBER() OVER (ORDER BY t .开始日期, t .开始时间, t .序号) AS 索引,
[序号] AS 原始序号,
位置 + ':' + 棚位地址 + ':' + CONVERT(varchar(4), [SLOT_ID]) AS Flag,
位置+':'+棚位地址+'★'+CONVERT(varchar(20), 开始日期, 23)+' '+开始时间 as 样本标签,
位置 + ':' + 棚位地址 AS 完整地址,
Row_number() OVER (partition BY 位置 + ':' + 棚位地址 + ':' + CONVERT(varchar(4), [SLOT_ID]) ORDER BY 序号 ASC) AS FirstN,
Row_number() OVER (partition BY 位置 + ':' + 棚位地址 + ':' + CONVERT(varchar(4), [SLOT_ID]) ORDER BY 序号 DESC) AS LastN,
CONVERT(varchar(20), 开始日期, 23) AS 开始日期,
Year(开始日期) AS 年份,
RIGHT('0' + CONVERT(varchar(2), Month(开始日期)), 2) AS 月份,
CONVERT(varchar(2), day(开始日期)) AS 日期,
datepart(ww, 开始日期) AS 周别,
'Y' + CONVERT(Varchar(4), Year(开始日期)) + 'W' + RIGHT('0' + CONVERT(varchar(2), datepart(ww, 开始日期)), 2) AS 年周,
[开始时间],
[结束时间],
[共计时间],
[洗净号机],
[作业人员],
[组别],
[位置],
[归属设备],
[棚位属性],
[棚位地址],
LEFT(棚位地址, 2) AS [L1/L2],
SUBSTRING(棚位地址, 5, 2) AS 层数,
RIGHT(棚位地址, 2) AS 棚位No,
[位置划分],
[CST_NO],
[SLOT_ID],
[S1],
[M1],
[L1],
[S2],
[M2],
[L2],
[L差值],
[T差值],
[L规格],
[T规格],
[L差值判定],
[T差值判定],
B.[L差值达标判定],
B.[T差值达标判定]
FROM
(
SELECT 序号,
开始日期,
开始时间,
结束时间,
ROUND(共计时间, 2) AS 共计时间,
洗净号机,
作业人员,
组别,
位置,
设备名 AS 归属设备,
[PORT] AS 棚位属性,
棚位地址,
位置划分,
CST_NO,
[SLOT_ID],
S1,
M1,
L1,
S2,
M2,
L2,
L差值,
T差值,
L规格,
T规格,
L差值判定,
T差值判定
FROM
dbo.ATGomi_Port
UNION ALL
SELECT
序号,
开始日期,
开始时间,
结束时间,
ROUND([共计时间], 2) AS 共计时间,
洗净号机,
作业人员,
'AT' AS 组别,
位置,
'Bay棚位' AS 归属设备,
'棚位' AS 棚位属性,
棚位地址,
位置划分,
CST_NO,
SLOT_ID,
S1,
M1,
L1,
S2,
M2,
L2,
L差值,
T差值,
L规格,
T规格,
L差值判定,
T差值判定
FROM
[PowerBI].[dbo].[View_ATGomi_Stock]
) t
left join
(
select
位置+':'+棚位地址+'★'+CONVERT(varchar(20), 开始日期, 23)+' '+开始时间 as 样本编码,
L差值达标判定= case when sum(L差值判定)=2 then 1 else 0 end,
T差值达标判定= case when sum(T差值判定)=2 then 1 else 0 end
from
[PowerBI].[dbo].[ATGomi]
group by
位置+':'+棚位地址+'★'+CONVERT(varchar(20), 开始日期, 23)+' '+开始时间
Union all
select
位置+':'+棚位地址+'★'+CONVERT(varchar(20), 开始日期, 23)+' '+开始时间 as 样本编码,
L差值达标判定= case when sum(L差值判定)=2 then 1 else 0 end,
T差值达标判定= case when sum(T差值判定)=2 then 1 else 0 end
from
[PowerBI].[dbo].[ATGomi_Port]
group by
位置+':'+棚位地址+'★'+CONVERT(varchar(20), 开始日期, 23)+' '+开始时间
) B
on
t.位置+':'+棚位地址+'★'+CONVERT(varchar(20), 开始日期, 23)+' '+开始时间 = B.样本编码
order by
索引
注释就不写了,
引用的几个表如下:
1.ATgomi
Atgomi_BayStorage