我还在学习 SQL,所以请原谅明显的错误。我想出了以下脚本,我基本上需要列出每列的每日信息。我可能过度使用子查询,因为它们返回相同的值,但我不知道如何修复它。任何提示将不胜感激。最终目标是获得一个我可以拉入 SSRS 的功能查询。
SELECT
CONVERT(date, d.ts) 'Date',
s.StoreId 'Store No.',
s.Description,
h.NetTotalPrice,
b.BudgetAmt,
eod.BalanceAmount'Electronic Deposit',
h.custID'Cust Count',
c.TotalTransactions'NumTrans',
c.TotalSales,
--departments subqueries
(SELECT TOP 1 SUM(h.NetTotalPrice)
FROM tblTransSalesHdr h WITH (nolock)
LEFT JOIN tblDept dep ON h.storeID = dep.StoreId
WHERE dep.DeptID = 'Accessories'
GROUP BY h.StoreId) 'ACCESSORIES',
(SELECT TOP 1 SUM(h.NetTotalPrice)
FROM tblTransSalesHdr h WITH (nolock)
LEFT JOIN tblDept dep ON h.storeID = dep.StoreId
WHERE dep.DeptID = 'Books'
GROUP BY h.StoreId) 'BOOKS',
(SELECT TOP 1 SUM(h.NetTotalPrice)
FROM tblTransSalesHdr h WITH (nolock)
LEFT JOIN tblDept dep ON h.storeID = dep.StoreId
WHERE dep.DeptID = 'Electronics' OR dep.deptID = 'Electrical and mechanical'
GROUP BY h.StoreId) 'E&M',
(SELECT TOP 1 SUM(h.NetTotalPrice)
FROM tblTransSalesHdr h WITH (nolock)
LEFT JOIN tblDept dep ON h.storeID = dep.StoreId
WHERE dep.DeptID = 'Furniture'
GROUP BY h.StoreId) 'FURNITURE',
(SELECT TOP 1 SUM(h.NetTotalPrice)
FROM tblTransSalesHdr h WITH (nolock)
LEFT JOIN tblDept dep ON h.storeID = dep.StoreId
WHERE dep.DeptID = 'Linen'
GROUP BY h.StoreId) 'LINEN',
(SELECT TOP 1 SUM(h.NetTotalPrice)
FROM tblTransSalesHdr h WITH (nolock)
LEFT JOIN tblDept dep ON h.storeID = dep.StoreId
WHERE dep.DeptID = 'Shoes'
GROUP BY h.StoreId) 'SHOES',
(SELECT TOP 1 SUM(h.NetTotalPrice)
FROM tblTransSalesHdr h WITH (nolock)
LEFT JOIN tblDept dep ON h.storeID = dep.StoreId
WHERE dep.DeptID = 'Textiles'
GROUP BY h.StoreId) 'TEXTILES',
(SELECT TOP 1 SUM(h.NetTotalPrice)
FROM tblTransSalesHdr h WITH (nolock)
LEFT JOIN tblDept dep ON h.storeID = dep.StoreId
WHERE dep.DeptID = 'Wares'
GROUP BY h.StoreId) 'WARES',
(SELECT TOP 1 SUM(h.NetTotalPrice)
FROM tblTransSalesHdr h WITH (nolock)
LEFT JOIN tblDept dep ON h.storeID = dep.StoreId
WHERE dep.DeptID = 'Cash over/short'
GROUP BY h.StoreId) 'CASHOVER(SHORT)',
(SELECT TOP 1 SUM(h.NetTotalPrice)
FROM tblTransSalesHdr h WITH (nolock)
LEFT JOIN tblDept dep ON h.storeID = dep.StoreId
WHERE dep.DeptID = 'Found Money'
GROUP BY h.StoreId) 'Found Money',
(SELECT TOP 1 SUM(h.NetTotalPrice)
FROM tblTransSalesHdr h WITH (nolock)
LEFT JOIN tblDept dep ON h.storeID = dep.StoreId
WHERE dep.DeptID = 'Gift Card Purchased'
GROUP BY h.StoreId) 'Purchased GiftCard',
(SELECT TOP 1 SUM(h.NetTotalPrice)
FROM tblTransSalesHdr h WITH (nolock)
LEFT JOIN tblDept dep ON h.storeID = dep.StoreId
WHERE dep.DeptID = 'Gift Card Redeemed'
GROUP BY h.StoreId) 'Redeemed GiftCard',
--Discounts Subqueries
(SELECT TOP 1 SUM(h.NetTotalPrice)
FROM tblTransSalesHdr h WITH (nolock)
INNER JOIN tblTransSalesPmt pmt WITH (nolock) ON pmt.storeID = h.storeID
WHERE pmt.PmtMethodId = 'Mission$'
GROUP BY h.StoreId) 'Vouchers Money$',
(SELECT TOP 1 SUM(d.TotalDiscount)
FROM tblTransSalesDtl d WITH (nolock)
LEFT JOIN tblTransSalesLineDiscount ld WITH (nolock) ON d.StoreId = ld.StoreId AND d.TransId = ld.TransId
WHERE ld.DiscountType = 'COTW'
GROUP BY CONVERT(date, d.ts)) 'Color Disc',
(SELECT TOP 1 SUM(d.TotalDiscount)
FROM tblTransSalesDtl d WITH (nolock)
LEFT JOIN tblTransSalesLineDiscount ld WITH (nolock) ON d.StoreId = ld.StoreId AND d.TransId = ld.TransId
WHERE ld.DiscountType = 'PROMO-Employee'
GROUP BY CONVERT(date, d.ts)) 'Employee Disc',
(SELECT TOP 1 SUM(d.TotalDiscount)
FROM tblTransSalesDtl d WITH (nolock)
LEFT JOIN tblTransSalesLineDiscount ld WITH (nolock) ON d.StoreId = ld.StoreId AND d.TransId = ld.TransId
WHERE ld.DiscountType = 'PROMO-99 Sunday'
GROUP BY CONVERT(date, d.ts)) 'Sunday Disc'
FROM
tblTransSalesHdr h WITH (nolock)
INNER JOIN
tblTransSalesDtl d WITH (nolock) ON h.TransId = d.TransId
AND h.StoreId = d.StoreId
INNER JOIN
tblRptSalesByCategory c WITH (nolock) ON c.StoreId = d.StoreId
INNER JOIN
tblEODDrawerTotal eod WITH (nolock) ON eod.StoreId =c.StoreId
INNER JOIN
tblStore s WITH (nolock) ON eod.StoreId = s.StoreId
INNER JOIN
tbldept dep WITH (nolock) ON dep.StoreId = s.StoreId
LEFT JOIN
tblBudgetDaily b WITH (nolock) ON dep.StoreId = b.StoreId
AND dep.DeptId = b.DeptID
WHERE
Status = 3