具有交叉联接反透视的 SQL Server
Posted
技术标签:
【中文标题】具有交叉联接反透视的 SQL Server【英文标题】:SQL Server with Cross Join Unpivot 【发布时间】:2016-12-06 05:53:39 【问题描述】:我有一个独特的交叉申请。我有一张看起来像这样的桌子。
ID
我想看看是否可以将其拆分为 2 行和 4 列。 我想把SUB和APP一起拆分。
ClaimID === SUB Cost === APP Cost === Cost Type
109508 === 51.86 === 0.00 === "Parts"
109508 === 318.08 === 0.00 === "Labor"
这允许表格为每个类别的 SUB 与 APP 成本有一个简单的一行。我真的很感激这方面的一些帮助。作为旁注,我能够做到这一点,其中 1 行变成 4 行,SUB 和 APP 分别位于不同的行(每列一行),但随后我们失去了在行上比较 SUB 与 APP 的能力.
【问题讨论】:
虽然您正在重新排列数据,但这与人们所说的“标准化”无关。 【参考方案1】:这是使用Cross Apply
来取消透视数据的一种方法
SELECT ClaimId,
[Sub Cost],
[App Cost],
[Cost Type]
FROM yourtable
CROSS apply (VALUES (SUB_AllParts,APP_AllParts, 'Parts'),
(SUB_AllLabor,APP_AllLabor,'Labor'))
tc ([Sub Cost], [App Cost], [Cost Type])
【讨论】:
【参考方案2】:试试这个:
select claimid
,sub_allparts as 'sub cost'
,app_allparts as 'app cost'
,'"Parts"' as 'Cost Type'
from claim
union all
select claimid
,sub_alllabor as 'sub cost'
,app_alllabor as 'app cost'
,'"Labor"' as 'Cost Type'
from claim
【讨论】:
以上是关于具有交叉联接反透视的 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章