sql - 根据表中可用的列动态获取颜色
问题描述
有一个表格,每个产品都有独特的颜色范围,需要根据可用数量及时获取颜色。
你能帮我动态获取每种产品的颜色吗
create table test
(
Product varchar(200)
, Quantity int
, RangeRed varchar(200)
, RangeYellow varchar(200)
)
insert into test select 'A',10, '{value 1} <=5', '({value1} >5) and ({value1} <=10)'
insert into test select 'B',20, '{value 1} <=5', '({value1} >5) and ({value1} <=20)'
insert into test select 'C',50, '{value 1} <=5', '({value1} >5) and ({value1} <=10)'
insert into test select 'D',5, '{value 1} <=5', '({value1} >5) and ({value1} <=10)'
select Product, Quantity, case when RangeRed then 'Red' when RangeYellow then 'Yellow' else 'white' end as Color
select Product, Quantity,
Replace(RangeRed, '{value1}','Quantity') as RangeRed
, Replace(RangeYellow, '{value1}','Quantity') as RangeYellow
from test
) x
预期输出:
解决方案
为此,您必须使用动态 SQL。下面是一个简单的示例,但您可能希望对其进行改进。
请注意,这是使用将多行结果连接到单个输出中的 hacky 形式。有更好的方法可以做到这一点,我留给你作为练习。
将有一个不需要将union
所有行放在一起的解决方案,但它需要构建一个动态案例表达式来评估每个产品的条件。
create table #test
(
Product varchar(200)
, Quantity int
, RangeRed varchar(200)
, RangeYellow varchar(200)
)
insert into #test (Product, Quantity, RangeRed, RangeYellow)
values ('A', 10, '{Value1} <= 5', '({Value1} >5) and ({Value1} <=10)'),
('B', 20, '{Value1} <=5', '({Value1} >5) and ({Value1} <=20)'),
('C', 50, '{Value1} <=5', '({Value1} >5) and ({Value1} <=10)'),
('D', 5, '{Value1} <=5', '({Value1} >5) and ({Value1} <=10)')
declare @Sql nvarchar(max) = '';
select @Sql = @Sql + case when @Sql = '' then '' else ' union all ' end + 'select Product, Quantity, case when ' + replace(RangeRed,'{Value1}','Quantity') + ' then ''Red'' when ' + replace(RangeYellow,'{Value1}','Quantity') + ' then ''Yellow'' else ''White'' end Color from #test where Product = ''' + Product + '''' from #Test;
-- print @Sql; -- Debugging
exec (@Sql);
回报:
Product Quantity Colour
A 10 Yellow
B 20 Yellow
C 50 White
D 5 Red
推荐阅读
- javascript - Javascript - 重复使用函数而不删除以前的实例?
- c - 如何解释 ELF 文件中的“p_size”?
- regex - 正则表达式:检查字符串开头的字符
- reactjs - 为什么我在 reactjs 路由中得到相同 url 的两个结果?
- sql - sql substr变量url提取过程
- c# - 尝试使用 asp.net core 2.0 创建一个 excel 页面
- python - 是什么让 Python 中的虚拟环境成为虚拟环境?
- python - 在 R 中解析用户代理但如何使用 python?
- python - 如何正确记录查询参数(搜索、过滤)Django Rest Framework?
- jquery - 如何在jquery中显示默认的今天日期和未来日期禁用