Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Nhận tất cả các Mặt hàng đã bán dựa trên bộ sưu tập Các mặt hàng từ một bảng chính trong SQL Server

Điều này có thể sẽ giúp bạn có được hầu hết các con đường đến đó. Tôi đã không đưa ra logic để di chuyển các cột tóm tắt xung quanh vì điều đó sẽ chỉ hoạt động cho hai danh mục và tôi cho rằng bạn có nhiều cột khác.

CREATE TABLE #Master(ItemNo int,[Name] varchar(50), Category varchar(5)) 
INSERT INTO #Master VALUES(10001,'Apple','C1' )   
INSERT INTO #Master VALUES(10002, 'Coffee' ,'C1')  
INSERT INTO #Master VALUES(10003,'Bread','C2')   
INSERT INTO #Master VALUES(10004,'Beans' ,'C2')  

CREATe TABLE #Transactions(SiteID int,BusinessDate date,ItemName varchar(50),[Units Sold]int,[Units Sale]int,ItemNo int,  OrderNo varchar(20))
INSERT INTO #Transactions VALUES(1,'06/08/2018','Apple',1,5,10001,'122-1')
INSERT INTO #Transactions VALUES(1,'06/08/2018','Coffee',1,16,10002,'122-1')
INSERT INTO #Transactions VALUES(1,'06/08/2018','Bread',2,7,10003,'122-1')
INSERT INTO #Transactions VALUES(1,'06/08/2018','Beans',9,18,10004,'122-1')
INSERT INTO #Transactions VALUES(1,'06/08/2018','Apple',2,5,10001,'122-4')
INSERT INTO #Transactions VALUES(1,'06/08/2018','Coffee',2,6,10002,'122-4')
INSERT INTO #Transactions VALUES(1,'06/08/2018','Bread',1,7,10003,'122-4')
INSERT INTO #Transactions VALUES(1,'06/08/2018','Beans',4,8,10004,'122-4')
INSERT INTO #Transactions VALUES(2,'06/08/2018','Apple',2,5,10001,'122-2')
INSERT INTO #Transactions VALUES(2,'06/08/2018','Coffee',1,6,10002,'122-2')
INSERT INTO #Transactions VALUES(3,'06/08/2018','Bread',3,5,10003,'122-3')
INSERT INTO #Transactions VALUES(3,'06/08/2018','Beans',7,17,10004,'122-3')


;WITH CTE AS (
select MS.ItemNo,MS.Name,MS.Category, SUM(TR.[Units Sold]) RootItemSold, tr.OrderNo
from #Master MS
INNER JOIN #Transactions TR on MS.ItemNo = TR.ItemNo
GROUP BY MS.ItemNo,MS.Name,MS.Category, tr.OrderNo
),
MiddleCalc as
(
select ItemNo, [Name],Category,RootItemSold,OrderNo
,(SELECT ISNULL(SUM(1),0)  FROM CTE T2 where TRoot.OrderNo = t2.OrderNo and TRoot.Category <> t2.Category) HasOtherCategory
from CTE TRoot
)
SELECT ItemNo,[Name],[Category], 
CASE WHEN Category = 'C1' THEN
        SUM(RootItemSold)  
    ELSE
        SUM(CASE WHEN HasOtherCategory <> 0 THEN RootItemSold ELSE 0 END)  END C1,
CASE WHEN Category = 'C2' THEN
        SUM(RootItemSold)  
    ELSE
        SUM(CASE WHEN HasOtherCategory <> 0 THEN RootItemSold ELSE 0 END)  END C2
FROM MiddleCalc
GROUP BY ItemNo,[Name],[Category]


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phát hiện ngày NULL và hiển thị chuỗi trống trong SSRS

  2. Cách tạo Ràng buộc KIỂM TRA trong SQL Server (Ví dụ T-SQL)

  3. Nhận hàng đầu tiên / cuối cùng của nhóm thứ n liên tiếp

  4. Làm thế nào để tách chuỗi bằng cách sử dụng ký tự phân tách ký tự bằng T-SQL?

  5. Tôi có thể sử dụng nhiều con trỏ trên một kết nối với pyodbc và MS SQL Server không?