首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元间SQL差异

单元间SQL差异
EN

Stack Overflow用户
提问于 2016-12-14 14:43:28
回答 2查看 41关注 0票数 2

使用MS 2012

我有表,我需要找出不同的价格,这个新的专栏将是价格调整时,我导入到一个CMS。

SQL Fiddle模式

免责声明:不确定fiddle是否正常工作,以前从未使用过sql,确定模式并提供一些数据。

伪:每个不像列st_style上的' xCarcass‘的价格,然后根据相同的pd_ref计算出它和xCarcass之间的差异。

解释,所以基本上每个PD_Code都有几个价格,这取决于st_style有什么。在我的cms中,我想要导入这些价格,xCarcass被用作我的基本价格,我希望所有其他st_styles都显示价格差异,而不是全价。(与基准价格之差,即xCarcass价格)。

到目前为止,:我知道我需要为此创建一个查询,但是我对cte非常熟悉。

代码语言:javascript
复制
WITH cte as
(SELECT
ROW_NUMBER() OVER (PARTITION BY [Pricing].[pd_code] ORDER BY [pd_ref]) row,
[pd_code]
  ,[pd_ref]
  ,[pg_groupref]
  ,[pr_price]
  ,[pg_group]
  ,[st_styleref]
  ,[st_style]
FROM [Pricing])

SELECT a.[pd_code]
  ,a.[pd_ref]
  ,a.[pg_groupref]
  ,a.[pg_group]
  ,a.[st_styleref]
  ,a.[st_style],
   a.pr_price - ISNULL(b.pr_price,0)
FROM 
      cte a
      LEFT JOIN cte b
      on a.[pd_code] = b.[pd_code]
      and a.row = b.row+1

正如您所看到的,这根本不起作用,因为我没有指定条件,我认为这是完全错误的,但我很确定我需要在这个问题上使用CTE查询。

有人能想出正确的方法来对所描述的问题执行这个查询吗?如果您需要进一步的澄清,请询问。

预期OutPUT

代码语言:javascript
复制
**pd_code | pd_ref | pg_groupref | pg_group | st_styleref | st_style | Price    | (no col name)**

  DG 100  | 72166  | 1336        | xCarcass | 3484        | xCarcass | 500 | 0 

  DG 100  | 72166  | 1337        | grp 1    | 3480        | stlye 3  | 550 | 50

  DG 100  | 72166  | 1338        | grp 2    | 3488        | style 7  | 700 | 200 

备注(请注意如何将此信息编辑为一个漂亮的表)

进一步澄清

为了帮助分类,每个pd_code有大约111行不同的样式,其中1行被称为“xCarcass”,所有样式都有一个rpice,我需要一个新的列在末尾,基本上计算出它的价格与每个pd_code的特定行'xCarcass‘之间的差额。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-14 14:54:25

您可以使用max窗口函数来获取每个pd_code的x屠体行的价格,并将其用于减去该pd_code的所有其他非x屠体行。

代码语言:javascript
复制
select p.*
,pr_price - coalesce(max(case when st_style like '%xcarcass%' then pr_price end) over(partition by pd_code) ,0) val_diff
from pricing p
票数 1
EN

Stack Overflow用户

发布于 2016-12-14 14:52:50

如果您使用的是SQLserver-2012,那么可以使用一个分析功能来实现这一目标,即LEAD()。下面是您可以使用的查询

代码语言:javascript
复制
SELECT 
[pd_code]
  ,[pd_ref]
  ,[pg_groupref]
  ,[pr_price] - ISNULL(LEAD(pr_price) OVER(ORDER BY pd_ref), 0)
  ,[pg_group]
  ,[st_styleref]
  ,[st_style]
FROM [Pricing]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41145358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档