将最大值和大小写添加到数据中?
Adding max and case to data?
我想在这里向我的代码添加一些东西并修改它 table,但我在 SQL 方面有点新手,我正在努力使精神飞跃,找出如何连接一些东西。
我正在尝试按作业添加分区以获得第 1、2、3、4 行...(因此作业 21980 将有 3 行)
然后我想按 JOB 添加 MAX of ROW NO(所以基本上我想显示每个作业的最高行。所以作业 21980 有 3 行,我只想显示值3)
然后我想说:当行号不是最大行号时,我希望行中的数据对于列为零:PO$$,Wip Total,per pc、标准成本、DIFF、利润百分比
当前 SQL 生成此数据:
SELECT [Job #],
,[Date]
,[Variance Amt]
,[Job QTY]
,[OpenQty]
,[Part #]
,[Material]
,[PCS #]
,[Matrl$$]
,[Date Last Issue]
,case when substring([PurchaseOrders],len([PurchaseOrders]),1) = '|' then substring([PurchaseOrders],1,len([PurchaseOrders])-1) else [PurchaseOrders] end [PurchaseOrders]
,[PO$$]
,[Date Last Rcvd]
,[Wip Total]
,[per pc]
,[Standard Cost]
,[DIFF]
,[% of Profit]
FROM [VarianceView]
Order By [Job #]
我知道如何开始第 1 步和第 2 步,但我只知道这些。
ROW_NUMBER() OVER(PARTITION BY [Job #]
ORDER BY [Job #] DESC) AS 'RN'
,count(*) over(partition by [Job #]) as maxrn
Some Sample Data
在此先感谢大家的帮助!
我认为您的拼图中缺少的部分是 Common Table Expression。您不能引用窗口函数,除非它首先出现在常见的 table 表达式或 sub-query 中。以下是我将如何解决您的问题。您还希望 row_number()
函数中的 order by
子句包含您希望的工作记录排序方式。例如,您可能希望使用最新的 [Date Last Issue]
作为分区中的最后一条记录或第一条记录来评估它们。
如果您只想显示排名靠前的 Job # 记录,则需要添加另一个 row_number()
函数(例如“RowNumberDesc”),但 [Job #] 是降序排列的。然后你可以在外部查询中添加一个 where 子句来限制 RowNumberDesc = 1.
with cte as (
select
[Job #]
,[Date]
,[Variance Amt]
,[Job QTY]
,[OpenQty]
,[Part #]
,[Material]
,[PCS #]
,[Matrl$$]
,[Date Last Issue]
,case when substring([PurchaseOrders],len([PurchaseOrders]),1) = '|' then substring([PurchaseOrders],1,len([PurchaseOrders])-1) else [PurchaseOrders] end [PurchaseOrders]
,[PO$$]
,[Date Last Rcvd]
,[Wip Total]
,[per pc]
,[Standard Cost]
,[DIFF]
,[% of Profit]
,ROW_NUMBER() OVER(PARTITION BY [Job #] ORDER BY [Date Last Issue]) AS 'RN'
,count(*) over(partition by [Job #]) as maxrn
FROM [VarianceView]
)
SELECT [Job #]
,[Date]
,[Variance Amt]
,[Job QTY]
,[OpenQty]
,[Part #]
,[Material]
,[PCS #]
,[Matrl$$]
,[Date Last Issue]
,case when substring([PurchaseOrders],len([PurchaseOrders]),1) = '|' then substring([PurchaseOrders],1,len([PurchaseOrders])-1) else [PurchaseOrders] end [PurchaseOrders]
,case when rn <> maxrn then 0 else [PO$$] end as [PO$$]
,[Date Last Rcvd]
,case when rn <> maxrn then 0 else [Wip Total] end as [Wip Total]
,case when rn <> maxrn then 0 else [per pc] end as [per pc]
,case when rn <> maxrn then 0 else [Standard Cost] end as [Standard Cost]
,case when rn <> maxrn then 0 else [DIFF] end as [DIFF]
,case when rn <> maxrn then 0 else [% of Profit] end as [% of Profit]
,rn as [ROW NO by JOB]
,maxrn as [MAX of ROW NO by JOB]
FROM cte
Order By [Job #]
我想在这里向我的代码添加一些东西并修改它 table,但我在 SQL 方面有点新手,我正在努力使精神飞跃,找出如何连接一些东西。
我正在尝试按作业添加分区以获得第 1、2、3、4 行...(因此作业 21980 将有 3 行)
然后我想按 JOB 添加 MAX of ROW NO(所以基本上我想显示每个作业的最高行。所以作业 21980 有 3 行,我只想显示值3)
然后我想说:当行号不是最大行号时,我希望行中的数据对于列为零:PO$$,Wip Total,per pc、标准成本、DIFF、利润百分比
当前 SQL 生成此数据:
SELECT [Job #],
,[Date]
,[Variance Amt]
,[Job QTY]
,[OpenQty]
,[Part #]
,[Material]
,[PCS #]
,[Matrl$$]
,[Date Last Issue]
,case when substring([PurchaseOrders],len([PurchaseOrders]),1) = '|' then substring([PurchaseOrders],1,len([PurchaseOrders])-1) else [PurchaseOrders] end [PurchaseOrders]
,[PO$$]
,[Date Last Rcvd]
,[Wip Total]
,[per pc]
,[Standard Cost]
,[DIFF]
,[% of Profit]
FROM [VarianceView]
Order By [Job #]
我知道如何开始第 1 步和第 2 步,但我只知道这些。
ROW_NUMBER() OVER(PARTITION BY [Job #]
ORDER BY [Job #] DESC) AS 'RN'
,count(*) over(partition by [Job #]) as maxrn
Some Sample Data
在此先感谢大家的帮助!
我认为您的拼图中缺少的部分是 Common Table Expression。您不能引用窗口函数,除非它首先出现在常见的 table 表达式或 sub-query 中。以下是我将如何解决您的问题。您还希望 row_number()
函数中的 order by
子句包含您希望的工作记录排序方式。例如,您可能希望使用最新的 [Date Last Issue]
作为分区中的最后一条记录或第一条记录来评估它们。
如果您只想显示排名靠前的 Job # 记录,则需要添加另一个 row_number()
函数(例如“RowNumberDesc”),但 [Job #] 是降序排列的。然后你可以在外部查询中添加一个 where 子句来限制 RowNumberDesc = 1.
with cte as (
select
[Job #]
,[Date]
,[Variance Amt]
,[Job QTY]
,[OpenQty]
,[Part #]
,[Material]
,[PCS #]
,[Matrl$$]
,[Date Last Issue]
,case when substring([PurchaseOrders],len([PurchaseOrders]),1) = '|' then substring([PurchaseOrders],1,len([PurchaseOrders])-1) else [PurchaseOrders] end [PurchaseOrders]
,[PO$$]
,[Date Last Rcvd]
,[Wip Total]
,[per pc]
,[Standard Cost]
,[DIFF]
,[% of Profit]
,ROW_NUMBER() OVER(PARTITION BY [Job #] ORDER BY [Date Last Issue]) AS 'RN'
,count(*) over(partition by [Job #]) as maxrn
FROM [VarianceView]
)
SELECT [Job #]
,[Date]
,[Variance Amt]
,[Job QTY]
,[OpenQty]
,[Part #]
,[Material]
,[PCS #]
,[Matrl$$]
,[Date Last Issue]
,case when substring([PurchaseOrders],len([PurchaseOrders]),1) = '|' then substring([PurchaseOrders],1,len([PurchaseOrders])-1) else [PurchaseOrders] end [PurchaseOrders]
,case when rn <> maxrn then 0 else [PO$$] end as [PO$$]
,[Date Last Rcvd]
,case when rn <> maxrn then 0 else [Wip Total] end as [Wip Total]
,case when rn <> maxrn then 0 else [per pc] end as [per pc]
,case when rn <> maxrn then 0 else [Standard Cost] end as [Standard Cost]
,case when rn <> maxrn then 0 else [DIFF] end as [DIFF]
,case when rn <> maxrn then 0 else [% of Profit] end as [% of Profit]
,rn as [ROW NO by JOB]
,maxrn as [MAX of ROW NO by JOB]
FROM cte
Order By [Job #]