Sql语法高级应用之四:使用视图实现多表联合数据明细
之前章节我们讲到:如果某个表的数据是多个表的联合,并且存在列与列的合并组成新列,用视图是最好的方案。
下面我分享两个个真实的SQL语句案例
USE Wot_Inventory
GO
IF EXISTS (SELECT 1 FROM sys.views WHERE Name = 'InvoiceSearchListView')
DROP VIEW InvoiceSearchListView;
GO
CREATE VIEW InvoiceSearchListView
AS
SELECT ROW_NUMBER()OVER(ORDER BY i.CreateDatetime DESC) AS Id,
i.InvoiceId InvoiceId,i.InvoiceCode,i.[Status],
CASE WHEN ls.[Status] IS NULL THEN 99 ELSE ls.[Status] END AS TraceState_Auto,i.TraceState TraceState_Own,
i.SalesChannelId,i.SalesChannelName,i.WarehouseId,i.WarehouseName,sh.ShipperId,sh.ShipperName,sh.ShipperNo,
sh.MonthlyAccount,i.LogisticCode,i.Receivable,i.AgencyFund,
Sketch = (
STUFF(
(SELECT CASE WHEN id.Number > 0 THEN ', ' + pro.ProductName + pro.Spec + '(' + CONVERT(NVARCHAR(10),id.Number) + pro.Unit + ')' ELSE '' END
FROM dbo.Products pro INNER JOIN dbo.InvoiceDetail id ON id.ProductId = pro.ProductId
WHERE id.InvoiceId = i.InvoiceId
FOR XML PATH('')
),1,1,'')
),
i.SalesGroupId,i.SalesGroupName,i.SalesUserId,i.SalesUserName,ls.SyncDate,
ls.LastTraceDesc,i.LastDescUserName,i.LastDescDate,i.LastDesc,
i.CreateDatetime,i.AgreedDate,i.PrintCheckDate,i.OutWarehouseDate,i.TraceStateDate,i.ContrastDate,i.CompleteDate,
i.OrderId,i.OrderNo,i.PrintType,i.PrintNumber,i.CustomerId,i.CustomerName,i.CustomerPhone,
i.Country,i.Province,i.City,i.InsurreValue,i.FragileInsurreValue,i.Freight,
i.IsReceived,i.IsComplete
FROM Wot_Inventory.dbo.Invoice i
LEFT JOIN Wot_Inventory.dbo.Logistics ls ON ls.InvoiceId = i.InvoiceId
LEFT JOIN Wot_Sales.dbo.Shipper sh ON i.ShipperId = sh.ShipperId
WHERE i.[State] <> -1 GO
带多列合并
USE Wot_Inventory
GO
IF EXISTS (SELECT 1 FROM sys.views WHERE Name = 'LogisticsFollowView')
DROP VIEW LogisticsFollowView;
GO
CREATE VIEW LogisticsFollowView
AS
SELECT ROW_NUMBER()OVER(ORDER BY i.OutWarehouseDate DESC) AS Id,
i.InvoiceId,
i.IsOutWarehouse,
i.OutWarehouseDate,
sh.ShipperId,
sh.ShipperNo,
sh.ShipperName,
i.LogisticCode,
ls.LastTraceDate,
ls.LastTraceDesc,
ls.[Status],
i.TraceState,
ls.SyncDate,
i.LastFollowDate,
i.LastFollowDesc,
i.LastFollowUserName,
i.SalesChannelName,
sh.MonthlyAccount,
i.Receiver,
i.Country,
i.Province,
i.City,
i.OrderNo,
i.InvoiceCode,
i.TraceStateDate,
i.TraceStateUser,
i.SalesGroupId,
i.SalesUserId,
i.SalesUserName,
i.OrderId,
i.CustomerName,
i.CustomerPhone,
i.PrintCheckDate
FROM Wot_Inventory.dbo.Invoice i
LEFT JOIN Wot_Inventory.dbo.Logistics ls ON ls.InvoiceId = i.InvoiceId
LEFT JOIN Wot_Sales.dbo.Shipper sh ON i.ShipperId = sh.ShipperId
WHERE i.[State] <> -1 AND i.LogisticCode IS NOT NULL AND i.[Status] >= 4 AND i.IsAddressCheck = 1 AND i.IsPrintCheck = 1 AND i.TraceState NOT IN(6,3,4)
不带多列合并 ,在视图中添加条件
PS:欢迎扫描下方二维码或点击链接,加入QQ群


Sql语法高级应用之四:使用视图实现多表联合数据明细的更多相关文章
- Sql语法高级应用之二:视图
SQL CREATE VIEW 语句 什么是视图? 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中 ...
- Sql语法高级应用之三:存储过程
一.存储过程概述 SQL Server中的存储过程是使用T_SQL编写的代码段.它的目的在于能够方便的从系统表中查询信息,或者完成与更新数据库表相关的管理任务和其他的系统管理任务.T_SQL语句是SQ ...
- Sql语法高级应用之六:如何在Sql语句中如何使用TRY...CATCH
TRY...CATCH使用范例 BEGIN TRY //逻辑语句块 END TRYBEGIN CATCH //Catch异常处理块 SET @msg = ERROR_MESSAGE(); PRINT ...
- Sql语法高级应用之七:如何在存储过程中使用事务
普通事物: USE Wot_Inventory; GO BEGIN TRANSACTION tr; DECLARE @error INT; SET @error = 0; SELECT * FROM ...
- Sql语法高级应用之五:使用存储过程实现对明细多层次统计
前言 前面章节我们讲到了存储过程的基础用法,本章则将一个在项目中实际应用的场景. 在项目中经常会存在这样的需求,例如需要对明细列表进行按组.按级别.按人等进行统计,如果在附带列表的查询条件,又如何实现 ...
- Sql语法高级应用之一:使用sql语句如何实现不同的角色看到不同的数据
前言 在常见的管理系统中,通常都有这样的需求,管理员可以看到所有数据,部门可以看到本部门的数据,组长可以看到自己组的数据,组员只能看到自己相关的数据. 一般人的做法是,根据不同的角色通过if...el ...
- SQL语法集锦一:显示每个类别最新更新的数据
本文转载http://www.cnblogs.com/lxblog/archive/2012/09/28/2707504.html (1)显示每个类别最新更新的数据 在项目中经常遇到求每个类别最新显示 ...
- 006-Hadoop Hive sql语法详解1-数据结构和Hive表建立
1.认识hive: Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构化的数据文件映射为一张数据库表, ...
- SQL 语法总结
学了一个月的java,开始有入门的感觉.这段时间接触到了java的JDBC, 发现学习这部分的内容还是要有SQL的基础,于是花费了几天时间学习了一下SQL语法,并将其总结于下. 选择数据 SELECT ...
随机推荐
- 超文本传输协议http详解
HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第 ...
- [Delphi] FMXUI - 沉侵式状态栏
好消息!FMXUI正式支持Android和IOS的沉侵式状态栏了. 先来看看效果图 安卓: IOS: 一.Android 沉侵式状态栏 FMXUI的沉侵式状态栏支持SDK版本大于21的Android系 ...
- C# user32.dll
#region User32.dll 函数 /// <summary> /// 该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以在GDI函数中使用该句柄来在设备 ...
- SpringFox swagger2 and SpringFox swagger2 UI 接口文档生成与查看
依赖: <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency ...
- linux中用date命令获取昨天、明天或多天前后的日期
转自:http://www.linuxde.net/2011/10/1033.html 在实际操作中,一些脚本中会调用明天,或者昨天,或更多天前的日期,本文将叙述讲述用date命令实现时间的显示.在L ...
- c# 数据集调试工具插件
DataSetSpySetup,调试期查看dataset数据集的记录内容, Debug DataSet
- 横向文本框 cursor:pointer 出现手型
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- win7局域网内共享文件夹及安全设置
右键想要共享的文件夹,选择属性. 在文件夹属性对话框中选择共享标签,如图: 点击共享按钮,弹出文件共享对话框. 添加 Everyone ,并根据实际需要修改权限.权限可以是读取 或 读取/写入. 到此 ...
- k8s gpu 资源设置
将所有相同型号显卡的node打上 相同的label kubectl label node ogs-gpu02 gpu_type=k20m 启动device plugin 和app 时: nodeSel ...
- redis在Web中的使用
redis是一个键值对数据库,用于缓存数据. redis是一个key-value存储系统.和Memcached数据库类似,它支持存储的value类型相对更多,包括string(字符串).list(链表 ...