在 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也改了
我正在尝试在 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也改了