学习Sql server 及数据库近一年,写的最长的Sql 语句

学习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
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值