Advertisement
Guest User

Tydzień7_zad2

a guest
Apr 5th, 2020
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 2.34 KB | None | 0 0
  1. --CREATE TABLE [dbo].[SalesAggregated_Materialized](
  2. --  [ProductName] [varchar](20) NULL,
  3. --  [QtySum] [decimal](18, 6) NULL,
  4. --  [QtyAvg] [decimal](18, 6) NULL,
  5. --  [TotalPriceSum] [decimal](18, 6) NULL,
  6. --  [TotalPriceAvg] [decimal](18, 6) NULL,
  7. --  [Ct] [int] NULL,
  8. -- CONSTRAINT [IX_SalesAggregated_Materialized_Product_Uniqe] UNIQUE CLUSTERED
  9. --(
  10. --  [ProductName] ASC
  11. --)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  12. --) ON [PRIMARY]
  13. --GO
  14.  
  15.  
  16. SELECT * FROM SalesAggregated_Materialized
  17.  
  18.  
  19.  
  20. -- TRUNCATE TABLE dbo.SalesAggregated_Materialized
  21.  
  22. DECLARE
  23.     @TmpValue INT =0,
  24.     @ProductName NVARCHAR(100) = N''
  25.  
  26. MERGE INTO SalesAggregated_Materialized as [t]
  27. USING
  28. (
  29.     SELECT
  30.         P.ProductName,
  31.         SUM(Qty) + @TmpValue as qty_sum,
  32.         AVG(Qty) as qty_avg,
  33.         SUM(TotalPrice) as totalprice_sum,
  34.         AVG(TotalPrice) as totalprice_avg,        
  35.         COUNT(*) as Ct
  36.     FROM
  37.         [dbo].[SalesOrderDetail] SO
  38.         JOIN [dbo].[product] P ON SO.ProductId = P.ProductId
  39.     WHERE
  40.         @ProductName = N''  OR P.ProductName <> @ProductName
  41.     GROUP BY
  42.         P.ProductName
  43. ) AS [s]
  44. ON [t].ProductName = [s].ProductName
  45. WHEN MATCHED
  46.     AND
  47.     (
  48.         t.QtySum <> s.qty_sum
  49.         OR t.QtyAvg <> s.qty_avg
  50.         OR t.TotalPriceSum <> s.totalprice_sum
  51.         OR t.TotalPriceAvg <> s.totalprice_avg
  52.         OR t.Ct <> s.Ct
  53.     )
  54. THEN
  55.    UPDATE SET
  56.      t.QtySum = s.qty_sum
  57.      ,t.QtyAvg = s.qty_avg
  58.      ,t.TotalPriceSum = s.totalprice_sum
  59.      ,t.TotalPriceAvg = s.totalprice_avg
  60.      ,t.Ct = s.Ct
  61. WHEN NOT MATCHED THEN
  62.     INSERT (ProductName, QtySum, QtyAvg, TotalPriceSum, TotalPriceAvg, Ct)
  63.     VALUES ([s].ProductName, [s].qty_sum, [s].qty_avg, [s].totalprice_sum, [s].totalprice_avg, [s].Ct)
  64. WHEN NOT MATCHED BY SOURCE THEN --DELETE
  65.     UPDATE SET
  66.         t.QtySum = 0
  67.         ,t.QtyAvg = 0
  68.         ,t.TotalPriceSum = 0
  69.         ,t.TotalPriceAvg = 0
  70.         ,t.Ct = 0
  71. OUTPUT $action,
  72. DELETED.QtySum AS TargetQtySum,
  73. DELETED.QtyAvg AS TargetQtyAvg,
  74. DELETED.TotalPriceSum AS TargetTotalPriceSum,
  75. DELETED.TotalPriceAvg AS TargetTotalPriceAvg,
  76. DELETED.Ct AS TargetCt,
  77. INSERTED.QtySum AS SourceQtySum,
  78. INSERTED.QtyAvg AS SourceQtyAvg,
  79. INSERTED.TotalPriceSum AS SourceTotalPriceSum,
  80. INSERTED.TotalPriceAvg AS SourceTotalPriceAvg,
  81. INSERTED.Ct AS SourceCt,
  82. DELETED.ProductName AS TargetProductName,
  83. INSERTED.ProductName AS SourceProductName;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement