sql - 将数据集中的多个字段与描述连接起来
问题描述
首先,让我声明我们无法控制这些表的结构,它们是第三方解决方案,我只是试图创建一个查询以按照我指定的方式获取数据。此处显示的表/查询已大大简化以显示问题。
表格1
客户标志
CustomerID - int
Flag1 - bit
Flag2 - bit
Flag3 - bit
Flag4 - bit
Flag5 - bit
Flag6 - bit
...
这些位指示设置了哪些标志(1 = 设置,0 = 未设置)。
表 2
标志信息
FlagNumber - int
FlagDescription - varchar
FlagNumber 匹配CustomerFlag 表中的字段,即FlagNumber 1 用于CustomerFlag 表中的Flag1。
我要做的是获取为客户设置的标志列表以及标志描述。
输出应该是:
CustomerID, FlagNumber, FlagDescription
我们当前的解决方案有一大堆联合查询。
select CustomerID, '1' as FlagNumber, FlagDescription
from CustomerFlag with (nolock)
left outer join FlagInformation
on FlagNumber = '1'
where Flag1 = 1
union all
select CustomerID, '2' as FlagNumber, FlagDescription
from CustomerFlag with (nolock)
left outer join FlagInformation
on FlagNumber = '2'
where Flag2 = 1
union all
select CustomerID, '3' as FlagNumber, FlagDescription
from CustomerFlag with (nolock)
left outer join FlagInformation
on FlagNumber = '3'
where Flag3 = 1
union all
...
需要注意的是,这个例子并不完整——CustomerFlag 表中大约有 60 个标志位——当前视图有 60 个联合将它们全部连接起来。
我真的想知道是否有更好的方法来做到这一点!
解决方案
肯定有更好的方法。使用apply
和join
:
select cf.customerid, fi.flagdescription
from customerflag cf
cross apply (values (1, cf.flag1),
(2, cf.flag2),
. . . -- fill in the rest of the flags here
) v(flagnumber, value) join
flaginformation fi
on fi.flagnumber = v.flagnumber
where v.value = 1
推荐阅读
- excel - 将具有特定标题的工作表列复制到另一个工作表上的不同列中
- django - 如何修复 django 2.1.3 中的“MultiValueDictKeyError”
- attributes - 在android中的多行文本视图上应用的不同滚动条属性的用途是什么?
- python - fancyimpute Python 3 MemoryError
- javascript - 悬停在每个节点上时带有工具提示的 Highchart 网络图
- latex - 渐近线方程项之间的箭头
- node.js - Mongoose 等待 doc.save() 不完整
- mysql - 如何修复在 netbeans 中找不到适合 jdbc:mysql://localhost:3306/XXXX 的驱动程序
- python - 如何在 matplotlib 中绘制此数据集?
- swift - 使用堆栈的 CoreData 并发