在案例陈述中设置变量

问题描述 投票:0回答:2

我希望传递声明的变量来构建我的字符串。我想我想通过一个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'
sql sql-server tsql
2个回答
1
投票

我在这里看不到使用变量的意义,并且尝试在查询之外设置变量没有意义,因为您很可能希望为每一行重置该值。

我建议将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'

我假设当1not stu_0时需要'KG'的值,但是您可以根据需要更改它。

旁注:

  • 我修改了您的查询以使用表别名。这使查询更短,更易于阅读]]

  • 您需要在列baspri_0之前加上它所属的表的前缀(因为您的查询是不可能的,因此)]]

我不确定为什么要先声明一个字符串然后将其相乘,但是我只是内联大小写(并添加默认大小写?):

,(BASPRI_0 * CASE 
             WHEN ITMMASTER.STU_0 ='KG' 
             THEN 2.2
             ELSE ???
             END)  AS Importstring

0
投票

我不确定为什么要先声明一个字符串然后将其相乘,但是我只是内联大小写(并添加默认大小写?):

© www.soinside.com 2019 - 2024. All rights reserved.