我正在使用预建程序,所以我无法直接编辑SQL,我只能编辑它的片段。我遇到的问题是代码打印出客户代码,用于客户拥有的尽可能多的案例。例如,如果客户有57个案例,它将打印客户代码57次,而不是仅显示一次,如客户代码4案例57等。
我读到你可能无法使用OVER命令使用Unique或Distinct函数,但我不知道如果没有它可以使总和工作。这是我的代码:
SET NOCOUNT ON;
DECLARE @ShowZeros nVarChar(4000);
SET @ShowZeros = 'N';
SELECT
SUM ([IC_ProductLots].[Available_Alt]) OVER(PARTITION BY [AR_Customers]. [CustomerCode]) AS [Cases]
, IC_Products.UnitOfMeasure_Alt
, SUM([IC_ProductLots].[Available_Stk]) OVER(PARTITION BY [AR_Customers]. [CustomerCode]) AS [Total Stock]
, IC_Products.UnitOfMeasure_Stk
, IC_Products.Description1
, IC_Products.ProductCode
, AR_Customers.Name
, AR_Customers.CustomerCode
FROM
((( DC_Transactions
INNER JOIN
AR_Customers ON DC_Transactions.CustomerKey = AR_Customers.CustomerKey)
INNER JOIN
IC_ProductLots ON DC_Transactions.LotKey = IC_ProductLots.LotKey)
INNER JOIN
IC_Products ON DC_Transactions.ProductKey = IC_Products.ProductKey)
WHERE
(IC_Products.ProductCode = ' 515070') AND
((CASE WHEN @ShowZeros = 'Y' or @ShowZeros = 'YES' THEN 1 ELSE
(ISNULL([IC_ProductLots].[Available_Stk],0))
END) > 0)
ORDER BY
IC_Products.ProductCode
, AR_Customers.CustomerCode
, AR_Customers.Name
输出应类似于以下内容:
Cases | U/M | Total Stock | Description | Cust Name | Cust Code
-----------------------------------------------------------------
57 | CS | 1779.45 | Food | Restaurant | 2
4 | CS | 120 | Dough | Bakery | 44
目前,客户代码2打印出57行,客户代码44打印出4行,显示每个客户代码的相同信息。
答案 0 :(得分:0)
以下似乎或多或少都是你想要的。你说你只能部分编辑你的查询,但是,你需要GROUP BY子句来说明你想要的记录(即每个产品和客户一条记录),所以这是主要需要做的事情。然后您不能使用OVER子句,因为聚合组已由GROUP BY给出。我为可读性做了更多改动。看看你可以做什么编辑。
select
sum(l.available_alt) as cases
, p.unitofmeasure_alt
, sum(l.available_stk) as [total stock]
, p.unitofmeasure_stk
, p.description1
, p.productcode
, c.name
, c.customercode
from dc_transactions t
inner join ar_customers c on t.customerkey = c.customerkey
inner join ic_productlots l on t.lotkey = l.lotkey
inner join ic_products p on t.productkey = p.productkey
where p.productcode = ' 515070'
and (@showzeros in ('Y', 'YES') or l.available_stk > 0)
group by p.productcode, c.customercode
, p.unitofmeasure_alt, p.unitofmeasure_stk, p.description1, c.name
order by p.productcode, c.customercode;