Select 同一个 select 语句中的别名
Select alias in same select statement
i.Notes, SUM(l.Discount) AS Dcount, i.DiscDate, i.DueDate, i.UIMth, i.UISeq, poj.Job, poj.Description, i.UniqueAttchID, i.ReviewerGroup AS RevGrp, SUM(l.GrossAmt)
AS GrossAmt, v.PayTerms, dbo.HQPT.DiscRate, i.InvTotal, DATEDIFF(day,getdate(),i.DiscDate) AS DiscDays,
--Trying to use the DiscDays and Dcount here
if DiscDays, between '20' and '11' THEN sum(Dcount) as YelDisc
我希望有人能在这里帮助我。我对 T-SQL 很陌生。我相信我在这里需要的是一个子查询,但我不确定如何正确格式化它
谢谢
IF
是程序流,不是表达式
- 您不能在另一列中重复使用别名
- 比较数值结果时,不要用引号将常量值括起来
尝试
CASE WHEN DATEDIFF(day,getdate(),i.DiscDate) between 20 and 11
THEN sum(Dcount)
ELSE 0
END as YelDisc
你可以做一个子查询来重用别名,但是对于这样一个相对简单的表达式和你的结果集中的列数,它可能不值得。
您不能在同一查询中引用别名,但您可以执行以下操作:
select
i.Notes,
SUM(l.Discount) AS Dcount,
i.DiscDate,
i.DueDate,
i.UIMth,
i.UISeq,
poj.Job,
poj.Description,
i.UniqueAttchID,
i.ReviewerGroup AS RevGrp,
SUM(l.GrossAmt) AS GrossAmt,
v.PayTerms,
dbo.HQPT.DiscRate,
i.InvTotal,
DATEDIFF(day,getdate(),i.DiscDate) AS DiscDays,
--Trying to use the DiscDays and Dcount here
case
when DATEDIFF(day,getdate(),i.DiscDate) between '11' and '20' THEN sum(Dcount)
when DATEDIFF(day,getdate(),i.DiscDate) between '20' and '40' THEN sum(Dcount)/2
else 0 -- this is the default case that doesn't match your cases, it could return NULL
end as YelDisc
i.Notes, SUM(l.Discount) AS Dcount, i.DiscDate, i.DueDate, i.UIMth, i.UISeq, poj.Job, poj.Description, i.UniqueAttchID, i.ReviewerGroup AS RevGrp, SUM(l.GrossAmt)
AS GrossAmt, v.PayTerms, dbo.HQPT.DiscRate, i.InvTotal, DATEDIFF(day,getdate(),i.DiscDate) AS DiscDays,
--Trying to use the DiscDays and Dcount here
if DiscDays, between '20' and '11' THEN sum(Dcount) as YelDisc
我希望有人能在这里帮助我。我对 T-SQL 很陌生。我相信我在这里需要的是一个子查询,但我不确定如何正确格式化它
谢谢
IF
是程序流,不是表达式- 您不能在另一列中重复使用别名
- 比较数值结果时,不要用引号将常量值括起来
尝试
CASE WHEN DATEDIFF(day,getdate(),i.DiscDate) between 20 and 11
THEN sum(Dcount)
ELSE 0
END as YelDisc
你可以做一个子查询来重用别名,但是对于这样一个相对简单的表达式和你的结果集中的列数,它可能不值得。
您不能在同一查询中引用别名,但您可以执行以下操作:
select
i.Notes,
SUM(l.Discount) AS Dcount,
i.DiscDate,
i.DueDate,
i.UIMth,
i.UISeq,
poj.Job,
poj.Description,
i.UniqueAttchID,
i.ReviewerGroup AS RevGrp,
SUM(l.GrossAmt) AS GrossAmt,
v.PayTerms,
dbo.HQPT.DiscRate,
i.InvTotal,
DATEDIFF(day,getdate(),i.DiscDate) AS DiscDays,
--Trying to use the DiscDays and Dcount here
case
when DATEDIFF(day,getdate(),i.DiscDate) between '11' and '20' THEN sum(Dcount)
when DATEDIFF(day,getdate(),i.DiscDate) between '20' and '40' THEN sum(Dcount)/2
else 0 -- this is the default case that doesn't match your cases, it could return NULL
end as YelDisc