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 ...
随机推荐
- 接口自动化(二)--操作Excel获取需要数据
这一部分的内容记述一下对Excel表格的操作,本实战中的测试用例是由Excel来管理的,因此操作Excel是重要的一部分. 再次贴出这张图,所有的测试用例都在这个sheet内,请求数据真实存放在jso ...
- Input设置只读属性
input设置为只读一般用于查看详情: 格式为: (1)单纯的input框 <div class="form-group"> <label for="c ...
- #用openfiledialog文件和savefileDialog打开和保存文件
一.打开文件 Stream myStream = null; OpenFileDialog openFileDialog1 = new OpenFileDialog(); ...
- leetcode38
public class Solution { public string CountAndSay(int n) { //1 //11 //21 //1211 //111221 //312211 // ...
- 想取得刚才nextval()的值时,放心大胆的用currval()吧,currval()的返回值并不会因为nextval()的并发访问而混乱
以前写sql的时候总是担心current()得到的值并不会绝对等于我上一次nextval()取得的值;因为可能其他线程并发访问nextval(). 先说结论吧:当你拿到一个数据库连接,先nextval ...
- .NET高级软件工程师面试题排行榜(转载)
原文引用:https://m.sanwen8.cn/p/104gMSd.html 一.对于 Web 性能优化,您有哪些了解和经验吗? 出现指数:五颗星 主要考点:这道题是博主在博客园的新闻里面看到的, ...
- 如何使用find命令在Linux中查找文件
Linux Find命令是Linux系统管理员工具库中最强大的工具之一. Find是一个命令行实用程序,它允许您根据用户给定的表达式搜索目录层次结构中的文件和目录,并对每个匹配的文件应用用户指定的操作 ...
- Spring AOP相关术语
---------------------siwuxie095 Spring AOP 相关术语 (1)Joinpoint ...
- jQuery的表单选择器
1.常规选择器选择表单标签 $(function () { // var a = $("input").eq(0).val() // alert(a) // // var b = ...
- Atom 编辑器侧边栏忽略隐藏文件
设置中配置需要忽略的文件后缀 package中找到treeview,勾选上这个配置就行