我不确定为什么要先声明一个字符串然后将其相乘,但是我只是内联大小写(并添加默认大小写?):
我希望传递声明的变量来构建我的字符串。我想我想通过一个case语句设置变量,但是我以前没有做过。这是我到目前为止所做的。
DECLARE @stu_conv AS VARCHAR(5)
set @stu_conv = CASE
WHEN ITMMASTER.STU_0 ='KG' THEN'2.2'END -- I think i need s select here.
SELECT
YPRIMAT.YCROPYR_0
,ITMMASTER.TCLCOD_0
,SPRICLIST.DCGVAL_3
,ITMMASTER.TSICOD_2
,ITMMASTER.ACCCOD_0
,(BASPRI_0*@stu_conv) AS ImportstringAS Importstring
FROM LIVE.YPRIMAT
INNER JOIN LIVE.ITMMASTER ON YPRIMAT.ITMREF_0 = ITMMASTER.ITMREF_0
LEFT OUTER JOIN LIVE.SPRICLIST ON ITMMASTER.TCLCOD_0 = SPRICLIST.PLICRI1_0
WHERE SPRICLIST.PLICRD_0 = 'SPL000020'
我在这里看不到使用变量的意义,并且尝试在查询之外设置变量没有意义,因为您很可能希望为每一行重置该值。
我建议将case
表达式into移动到查询中,如下所示:
select
y.ycropyr_0,
i.tclcod_0,
s.dcgval_3,
i.tsicod_2,
i.acccod_0,
baspri_0 * case when i.stu_0 = 'KG' then 2.2 else 1 end as importstringas importstring
from live.yprimat y
inner join live.itmmaster i on y.itmref_0 = i.itmref_0
left outer join live.spriclist s on i.tclcod_0 = s.plicri1_0
where s.plicrd_0 = 'SPL000020'
我假设当1
为not stu_0
时需要'KG'
的值,但是您可以根据需要更改它。
旁注:
我修改了您的查询以使用表别名。这使查询更短,更易于阅读]]
您需要在列baspri_0
之前加上它所属的表的前缀(因为您的查询是不可能的,因此)]]
我不确定为什么要先声明一个字符串然后将其相乘,但是我只是内联大小写(并添加默认大小写?):
,(BASPRI_0 * CASE
WHEN ITMMASTER.STU_0 ='KG'
THEN 2.2
ELSE ???
END) AS Importstring
我不确定为什么要先声明一个字符串然后将其相乘,但是我只是内联大小写(并添加默认大小写?):