Tsql 声明我应该使用什么来引用同一程序中创建的字段
我试图创建一个新字段,然后在我的程序引用中,在case语句中创建该新字段,但我似乎无法正确使用语法-我的错误消息说在“=”附近有一个错误 这是我的密码:Tsql 声明我应该使用什么来引用同一程序中创建的字段,tsql,Tsql,我试图创建一个新字段,然后在我的程序引用中,在case语句中创建该新字段,但我似乎无法正确使用语法-我的错误消息说在“=”附近有一个错误 这是我的密码: declare @source_sys_obligation_id varchar(40); if facility_utilization in ('F') set source_sys_obligation_id = source_sys_facility_id else set source_sys_obligation_i
declare @source_sys_obligation_id varchar(40);
if facility_utilization in ('F')
set source_sys_obligation_id = source_sys_facility_id
else set source_sys_obligation_id = source_sys_utilization_num;
select
source_sys_utilization_num
,source_sys_id
,facility_utilization
,case when source_sys_id in ('AFSEAST','AFSLSAL','DFBDOM','ACBS')
then right('000000000000000' + substring(source_sys_obligation_id,6,10),16)
when source_sys_id in ('MLSTLEND')
then right('000000000000000' + left(source_sys_obligation_id,15),16)
else '' end as No
from BridgeUnderwrite.dbo.t_sag_pimsc1
where source_sys_id in ('AFSEAST','AFSLSAL','DFBDOM','ACBS','MLSTLEND')
order by source_sys_id
;
该错误与set语句有关。它们应该看起来像:
if facility_utilization in ('F')
set @source_sys_obligation_id = source_sys_facility_id
else
set @source_sys_obligation_id = source_sys_utilization_num;
应该这样做:)。但是,源系统设施id和源系统利用率数量很可能是您的下一个问题。它们也是变量(或者可能是传入的参数)?错误与set语句有关。它们应该看起来像:
if facility_utilization in ('F')
set @source_sys_obligation_id = source_sys_facility_id
else
set @source_sys_obligation_id = source_sys_utilization_num;
应该这样做:)。但是,源系统设施id和源系统利用率数量很可能是您的下一个问题。它们也是变量(或者传入的参数)吗?名称的一部分是“@”。所有的T-SQL变量名或过程参数都必须以这个字符开头(我认为原因是它们很容易从表名和列名中辨别出来)。因此,您可能需要说
set@source\u sys\u responsibility\u id…
,而不是set source\u sys\u responsibility\u id…
名称的一部分是“@”。所有的T-SQL变量名或过程参数都必须以这个字符开头(我认为原因是它们很容易从表名和列名中辨别出来)。所以你可能需要说set@source\u sys\u responsibility\u id…
,而不是set source\u sys\u responsibility\u id…
,你想要的和你能拥有的不一样!不能在选择语句中创建字段,然后在案例中的同一选择语句中引用该字段。您的代码毫无意义,并且严重缺乏对变量如何工作的理解
declare @source_sys_obligation_id varchar(40);
if facility_utilization in ('F')
set source_sys_obligation_id = source_sys_facility_id
else set source_sys_obligation_id = source_sys_utilization_num;
这不会向select添加列,甚至不会像其他人建议的那样添加@符号,因为这里没有select。此外,一个变量只能有一个值,每个记录不能有不同的值。所以,放弃整个方法。您真正需要的是一个派生表或CTE。您也可以简单地将第一种情况嵌入第二种情况。这样的事情可能会满足你的要求:
SELECT a.source_sys_utilization_num
,a.source_sys_id
,a.facility_utilization
,CASE WHEN a.source_sys_id in ('AFSEAST','AFSLSAL','DFBDOM','ACBS')
THEN RIGHT('000000000000000' + SUBSTRING(a.source_sys_obligation_id,6,10),16)
WHEN a.source_sys_id in ('MLSTLEND')
THEN RIGHT('000000000000000' + LEFT(a.source_sys_obligation_id,15),16)
ELSE '' END AS [No]
FROM
(SELECT
source_sys_utilization_num
,source_sys_id
,facility_utilization
,CASE WHEN facility_utilization = 'F' THEN source_sys_facility_id
ELSE source_sys_utilization_num END AS source_sys_obligation_id
FROM BridgeUnderwrite.dbo.t_sag_pimsc1
WHERE source_sys_id in ('AFSEAST','AFSLSAL','DFBDOM','ACBS','MLSTLEND')) a
ORDER BY source_sys_id
太忙,无法编写其他版本。也许其他人会提供。你想要的和你能拥有的是不一样的!不能在选择语句中创建字段,然后在案例中的同一选择语句中引用该字段。您的代码毫无意义,并且严重缺乏对变量如何工作的理解
declare @source_sys_obligation_id varchar(40);
if facility_utilization in ('F')
set source_sys_obligation_id = source_sys_facility_id
else set source_sys_obligation_id = source_sys_utilization_num;
这不会向select添加列,甚至不会像其他人建议的那样添加@符号,因为这里没有select。此外,一个变量只能有一个值,每个记录不能有不同的值。所以,放弃整个方法。您真正需要的是一个派生表或CTE。您也可以简单地将第一种情况嵌入第二种情况。这样的事情可能会满足你的要求:
SELECT a.source_sys_utilization_num
,a.source_sys_id
,a.facility_utilization
,CASE WHEN a.source_sys_id in ('AFSEAST','AFSLSAL','DFBDOM','ACBS')
THEN RIGHT('000000000000000' + SUBSTRING(a.source_sys_obligation_id,6,10),16)
WHEN a.source_sys_id in ('MLSTLEND')
THEN RIGHT('000000000000000' + LEFT(a.source_sys_obligation_id,15),16)
ELSE '' END AS [No]
FROM
(SELECT
source_sys_utilization_num
,source_sys_id
,facility_utilization
,CASE WHEN facility_utilization = 'F' THEN source_sys_facility_id
ELSE source_sys_utilization_num END AS source_sys_obligation_id
FROM BridgeUnderwrite.dbo.t_sag_pimsc1
WHERE source_sys_id in ('AFSEAST','AFSLSAL','DFBDOM','ACBS','MLSTLEND')) a
ORDER BY source_sys_id
太忙,无法编写其他版本。也许其他人会提供