1. 程式人生 > >Sql語法高級應用之四:使用視圖實現多表聯合數據明細

Sql語法高級應用之四:使用視圖實現多表聯合數據明細

sele inner receiver rod erp upn pen logistic received

之前章節我們講到:如果某個表的數據是多個表的聯合,並且存在列與列的合並組成新列,用視圖是最好的方案。

下面我分享兩個個真實的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語法高級應用之四:使用視圖實現多表聯合數據明細