在 AS 别名后使用子查询

Use subquery after AS alias

我正在尝试在 SQL 服务器 2019 中使用别名 AS 后的子查询,这是我的 sql 查询:

select concat(sum(labst),' kg') as (select distinct name1 from mb52 where werks='1202') from mb52 where werks='1202';

但是这个查询给出了这个错误:

Msg 102, Level 15, State 1, Line 1 Incorrect syntax near '('.

Msg 156, Level 15, State 1, Line 1 Incorrect syntax near the keyword 'from'.

我想得到这样的结果:

1202
--------------------------------------------
343979.535 kg

而不是使用 select concat(sum(labst),' kg') as "1202", 因为我从变量 $werks 中获取了 werks 的值,我的最终 SQL 查询如下所示:

select concat(sum(labst),' kg') as (select distinct name1 from mb52 where werks in ($werks)) from mb52 where werks in ($werks);

有人能帮我解决这个问题吗?

你应该使用动态 sql 来实现它

DECLARE @S NVARCHAR(MAX)
SELECT distinct @S = 'select concat(sum(labst),'' kg'') as '+ name1 +' from mb52 where werks=''1202''' from mb52 where werks='1202'
EXEC (@S)

为此,您需要使用动态查询 像这样:

DECLARE @query NVARCHAR(MAX) = 'select concat(sum(t1.labst),'' kg'') as '+  (SELECT DISTINCT
t1.name1  FROM dbo.mb52 t1  WHERE t1.werks = '1202') + ' from dbo.mb52 t1 where    t1.werks=''1202'''
EXEC sp_executesql @query

你可以像这样使用动态sql

declare @sql varchar(1000)
declare @name varchar(100)
declare @werks varchar(1000) = '1202, 1200'

select distinct
       @name = name1 
from   mb52
where  werks = 1202


set @sql = 'select concat(sum(labst), '' kg'') as ''' + @name + ''' from mb52 where werks in (' + @werks + ')'

exec (@sql)

看到这个 DBFiddle 你可以自己试一下

但是,您的查询在您编写时存在一个重大问题

as (select distinct name1 from mb52 where werks in ($werks))

如果 $werks

中的值不止一个,那么 name1 可以 return 多个值

所以我将其更改为 = 1202 就像其他答案一样
您的查询可能需要更像这样

set @sql2 = 'select concat(sum(labst), '' kg'') as ''' + @name + ''' from mb52 where werks = 1202'

我再次将 in $werks 更改为 = 1202,因为我认为它会产生错误的结果,但这取决于您。
查看 dbfiddle 并使用它直到它满足您的需要。

编辑

按照评论中的要求,这里是 $werks

中只有一个值的查询的样子
set @sql2 = 'select concat(sum(labst), '' kg'') as ''' + @name + ''' from mb52 where werks = ' + @werks

DBFiddle也改了