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群

原文地址:https://www.cnblogs.com/ydcnblog/p/9293540.html

时间: 2024-08-30 16:37:33

Sql语法高级应用之四:使用视图实现多表联合数据明细的相关文章

Sql语法高级应用之二:视图

SQL CREATE VIEW 语句 什么是视图? 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段.我们可以向视图添加 SQL 函数.WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表. 注释:数据库的设计和结构不会受到视图中的函数.where 或 join 语句的影响. SQL CREATE VIEW 语法 CREATE VIEW view_name AS

Sql语法高级应用之三:存储过程

一.存储过程概述 SQL Server中的存储过程是使用T_SQL编写的代码段.它的目的在于能够方便的从系统表中查询信息,或者完成与更新数据库表相关的管理任务和其他的系统管理任务.T_SQL语句是SQL Server数据库与应用程序之间的编程接口.在很多情况下,一些代码会被开发者重复编写多次,如果每次都编写相同功能的代码,不但繁琐,而且容易出错,而且由于SQL Server逐条的执行语句会降低系统的运行效率. 简而言之,存储过程就是SQL Server为了实现特定任务,而将一些需要多次调用的固定

SQL语法精讲(包括建库、建表、建视图、查询、增加、删除、)

SQL语法精讲(包括建库.建表.建视图.查询.增加.删除.修改) SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:

Sql Server来龙去脉系列之四 数据库和文件

在讨论数据库之前我们先要明白一个问题:什么是数据库? 数据库是若干对象的集合,这些对象用来控制和维护数据.一个经典的数据库实例仅仅包含少量的数据库,但用户一般也不会在一个实例上创建太多的数据库.一个数据库实例最多能创建32767个数据库,但是按照实际情况,一般设计是不会达到这个限制值. 为了更明显地说明数据库,数据库包含了以下属性和功能: *. 它是很多对象的集合,比如表.视图.存储过程.约束.对象集合的最大值是2(31) - 1(超过2百亿).一般对象的数量在几百至一万. *. 它维持拥有的用

最基本的SQL语法/语句

DDL—数据定义语言(Create,Alter,Drop,DECLARE) DML—数据操纵语言(Select,Delete,Update,Insert) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1.说明:创建数据库 Create DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份数据的 device USE mas

MySQL 最基本的SQL语法/语句(转发)

DDL—数据定义语言(Create,Alter,Drop,DECLARE) DML—数据操纵语言(Select,Delete,Update,Insert) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1.说明:创建数据库 Create DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份数据的 device USE mas

Oracle SQL语法系列(一)

一.结构化查询语言(SQL) 1.数据操作语言(DML) INSERT UPDATE DELETE 2.数据定义语言 CREATE ALTER DROP RENAME TRUNCATE 3.事务控制(TC) COMMIT ROLLBACK SAVEPOINT 4.数据控制语言(DCL) GRANT REVOKE 附录:Linux下执行SQL脚本 @/tmp/create_table.sql 二.创建数据库 create database xiaoxu user sys identified by

MySQL 最基本的SQL语法/语句

MySQL 最基本的SQL语法/语句 MySQL 最基本的SQL语法/语句,使用mysql的朋友可以参考下. DDL—数据定义语言(Create,Alter,Drop,DECLARE) DML—数据操纵语言(Select,Delete,Update,Insert) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1.说明:创建数据库 Create DATABASE database-name 2.说明:删除数据库 drop databa

MySQL数据库高级(三)——视图

MySQL数据库高级(三)--视图 一.视图简介 1.视图简介 视图是由SELECT查询语句所定义的一个虚拟表,是查看数据的一种非常有效的方式.视图包含一系列带有名称的数据列和数据行,但视图中的数据并不真实存在于数据库中,视图返回的是结果集. 2.创建视图的目的 视图是存储在数据库中的查询的SQL语句,创建视图主要出于两种原因:A.实现安全.视图可设置用户对视图的访问权限.创建查询是JAVA班学生成绩的视图javaview.NET班学生成绩的视图netview,授权zhang能够访问javavi