SQL语句 怎么用变量替代相同的SQL语句
SQL语句 如何用变量替代相同的SQL语句
请问这个SQL语句 中的 substring(p.PROJECT_STAGE,2,charindex('-',p.PROJECT_STAGE) - 2) 怎么才能不重复写啊?
上述那样虽然可以但是感觉太冗余了,怎样才能将substring(p.PROJECT_STAGE,2,charindex('-',p.PROJECT_STAGE) - 2) 替换成一个变量,然后其他地方都引用这个变量了?
谢谢啦各位
------解决方案--------------------
你可以用一个临时表先处理成substring(p.PROJECT_STAGE,2,charindex('-',p.PROJECT_STAGE) - 2) 的结果再在最终select中写。
------解决方案--------------------
------解决方案--------------------
select p.PROJECT_NAME project_name, p.ITEM_NUMBER project_no, c.NAME customer_name, c.CODE customer_no, i1.KEYED_NAME pm, i2.KEYED_NAME pe, i3.KEYED_NAME bd,
(case
when substring(p.PROJECT_STAGE,2,charindex('-',p.PROJECT_STAGE) - 2) >= 0 and substring(p.PROJECT_STAGE,2,charindex('-',p.PROJECT_STAGE) - 2) = 2 then 'MP'
when substring(p.PROJECT_STAGE,2,charindex('-',p.PROJECT_STAGE) - 2) >= 3 and substring(p.PROJECT_STAGE,2,charindex('-',p.PROJECT_STAGE) - 2) <= 8 then 'NPI'
when substring(p.PROJECT_STAGE,2,charindex('-',p.PROJECT_STAGE) - 2) >= 9 and substring(p.PROJECT_STAGE,2,charindex('-',p.PROJECT_STAGE) - 2) <= 10 then 'ESI'
请问这个SQL语句 中的 substring(p.PROJECT_STAGE,2,charindex('-',p.PROJECT_STAGE) - 2) 怎么才能不重复写啊?
上述那样虽然可以但是感觉太冗余了,怎样才能将substring(p.PROJECT_STAGE,2,charindex('-',p.PROJECT_STAGE) - 2) 替换成一个变量,然后其他地方都引用这个变量了?
谢谢啦各位
------解决方案--------------------
你可以用一个临时表先处理成substring(p.PROJECT_STAGE,2,charindex('-',p.PROJECT_STAGE) - 2) 的结果再在最终select中写。
------解决方案--------------------
with t as
(
select p.PROJECT_NAME project_name, p.ITEM_NUMBER project_no, c.NAME customer_name, c.CODE customer_no, i1.KEYED_NAME pm, i2.KEYED_NAME pe, i3.KEYED_NAME bd,
substring(p.PROJECT_STAGE,2,charindex('-',p.PROJECT_STAGE) - 2) as t
from p join c on ... join i1 on ... join ...
)
select PROJECT_NAME project_name, ITEM_NUMBER project_no, NAME customer_name, CODE customer_no, KEYED_NAME pm, KEYED_NAME pe, KEYED_NAME bd,
case when t>10 then null
when t>=9 then 'ESI'
when t>=3 then 'MPI'
when t>=0 then 'MP'
end
------解决方案--------------------
with t as
(
select p.PROJECT_NAME project_name, p.ITEM_NUMBER project_no, c.NAME customer_name, c.CODE customer_no, i1.KEYED_NAME pm, i2.KEYED_NAME pe, i3.KEYED_NAME bd,
substring(p.PROJECT_STAGE,2,charindex('-',p.PROJECT_STAGE) - 2) as t
from p join c on ... join i1 on ... join ...
)
select PROJECT_NAME project_name, ITEM_NUMBER project_no, NAME customer_name, CODE customer_no, KEYED_NAME pm, KEYED_NAME pe, KEYED_NAME bd,
case when t>10 then null
when t>=9 then 'ESI'
when t>=3 then 'MPI'
when t>=0 then 'MP'
end
from t