SQL Server:子查询返回相同的值

时间:2021-01-11 21:22:11

标签: sql sql-server reporting-services

我还在学习 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

输出看起来像这样: enter image description here

0 个答案:

没有答案
相关问题