基于列中的文本在SQL Server表中不同行的多列中执行添加
我试图找到一个查询,它根据同一表中其他列中的文本/数据,对不同行和不同列中的数据执行一些加减操作 下面的例子可以清楚地解决这个问题 考虑一下,我有一个名为基于列中的文本在SQL Server表中不同行的多列中执行添加,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我试图找到一个查询,它根据同一表中其他列中的文本/数据,对不同行和不同列中的数据执行一些加减操作 下面的例子可以清楚地解决这个问题 考虑一下,我有一个名为的表,它有四个字段/列,有几个记录,如下所示 Product Term Bid Offer ------------------------------ A Aug14 P Q A/B Aug14 R S B Aug14 X Y B
的表,它有四个字段/列
,有几个记录,如下所示
Product Term Bid Offer
------------------------------
A Aug14 P Q
A/B Aug14 R S
B Aug14 X Y
B Sep14 ab xy
B/C Sep14 pq rs
C Sep14 wx yz
Product Term Bid Offer
------------------------------
A Aug14 a b
B Aug14 c d
B Sep14 ab cd
C Sep14 abc cde
当我运行查询时,它应该查找由/
分隔的产品。在上述情况下,有两种类型的产品A/B和B/C
,然后它应该根据由/
分隔的产品查找单个产品,就像我们有一个由A/B
分隔的产品一样/
,因此它应该查找与A/B
具有相同术语的产品A和B
,并执行一些操作并返回以下数据
Product Term Bid Offer
------------------------------
A Aug14 P Q
A/B Aug14 R S
B Aug14 X Y
B Sep14 ab xy
B/C Sep14 pq rs
C Sep14 wx yz
Product Term Bid Offer
------------------------------
A Aug14 a b
B Aug14 c d
B Sep14 ab cd
C Sep14 abc cde
在上述结果中
a=R+Y b=S+X
c=Q-S d=P-R
其中,p、Q、R、S、X、Y
是表中的Bid
和Offer
值
类似的计算也适用于所有其他数据,如B/C Sep14..
和许多其他数据
范例
直截了当
A Oct14 -175 -75
B Oct14 125 215
A/B Oct14 NULL -150
结果应该是
A Oct14 NULL -150+125=-25
B Oct14 -75-(-150)=75 NULL
使用前面提到的方程式计算上述值
我可以知道在SQL Server 2012中解决此问题的更好方法吗?好,让我们创建一些测试数据:
DECLARE @Outright TABLE
(
Product VARCHAR(10),
Term VARCHAR(10),
Bid VARCHAR(10),
Offer VARCHAR(10)
)
INSERT INTO @Outright
VALUES
('A', 'Aug14','P','Q'),
('A/B','Aug14','R','S'),
('B', 'Aug14','X','Y');
制作一个cte,尝试找出上面发布的逻辑,并将单个产品线与多个产品线相匹配
;WITH t AS
(
SELECT
a.*,
d.DRN,
d.Bid dBid,
d.Product dProduct,
d.Offer dOffer,
ROW_NUMBER() OVER (ORDER BY a.Product) RN
FROM @Outright a
OUTER APPLY
(
SELECT *,
ROW_NUMBER() OVER (ORDER BY d.Product) DRN
FROM @Outright d
WHERE d.Product LIKE (a.Product + '/%')
OR d.Product LIKE ('%/' + a.Product)
) d
WHERE d.Product IS NOT NULL
)
现在我们尝试实现上面提到的+-规则(出价对出价、出价对出价等)
这是输出,有一些额外的列显示正在提取的数据
Prod1 Term1 FE1_1 FE1_2 FE2_1 FE2_2 RN Col1 Col2
A Aug14 R Y S X 1 R+Y S+X
B Aug14 Q S P R 2 Q-S P-R
我建议你先规范化你的表。我认为它已经被规范化了。你认为一列中有两个值,a/B,是规范化的吗?哎哟,在我的例子中,这只是一个单一的值,它与单个值a无关,我们的结果与显示的数据不匹配,D=P-R来自哪里?你为什么要加减一些?看起来您正在将多个产品、多个出价和多个报价放在一行中,这远远不是标准化的。从您的第二个表中,当没有报价使用这些值时,报价b、d、cd、cde从第一个表中出现在哪里。在询问是否可以做任何事情之前,您可能应该先清理一下您的示例,因为您的示例没有任何押韵或理由。可能还需要将术语放在where子句中,以便处理每个单独的日期,我将留给您作为练习。您还需要在该行中按术语进行划分,并对每个联合按术语进行分组:)我只是使用这些P、Q、R等作为实际值的符号。我用一个真实的例子编辑了这个问题。请看我上面提到的两个修复之外(我是输出文本而不是计算),逻辑对你有用吗?