MS-SQL 获取案例特定值
MS-SQL getting case specific values
我们有一个 table LogicalTableSharing 如下:
为了具体的需求,我们需要将每个TableCode的PhysicalCompany取到一个变量中。
我们尝试了如下基于案例的查询:
declare @tablecode varchar(50)
declare @inputcompany varchar(50)
declare @query nvarchar(2500)
set @inputcompany= 91
set @query = '
select '''+@inputcompany+''' AS inputcompany,
CASE WHEN lts.TableCode = ''tsctm005'' THEN lts.PhysicalCompany ELSE NULL END as tsctm005_company,
CASE WHEN lts.TableCode = ''tccom000'' THEN lts.PhysicalCompany ELSE NULL END as tccom000_company
from LogicalTableSharing lts
where lts.LogicalCompany = '''+@inputcompany+'''
'
EXEC sp_executesql @query
这显然给出了结果
期望的输出是
什么是正确的方法?
在 FROM
-less SELECT
中尝试子查询。为了提高性能,您需要在 (logicalcompany, tablecode)
上建立索引(或者反过来,这取决于哪个更具选择性)。
SELECT @inputcompany inputcompany,
(SELECT TOP 1
physicalcompany
WHERE logicalcompany = @inputcompany
AND tablecode = 'tsctm005'
ORDER BY <some criteria>) tsctm005_company,
(SELECT TOP 1
physicalcompany
WHERE logicalcompany = @inputcompany
AND tablecode = 'tccom000'
ORDER BY <some criteria>) tccom000_company;
您应该找到 <some criteria>
作为排序依据,以防有多个可能的行来决定哪一个优先。除非你每次 运行 查询另一个时可能只想要一个随机的,那就是。
我们有一个 table LogicalTableSharing 如下:
为了具体的需求,我们需要将每个TableCode的PhysicalCompany取到一个变量中。 我们尝试了如下基于案例的查询:
declare @tablecode varchar(50)
declare @inputcompany varchar(50)
declare @query nvarchar(2500)
set @inputcompany= 91
set @query = '
select '''+@inputcompany+''' AS inputcompany,
CASE WHEN lts.TableCode = ''tsctm005'' THEN lts.PhysicalCompany ELSE NULL END as tsctm005_company,
CASE WHEN lts.TableCode = ''tccom000'' THEN lts.PhysicalCompany ELSE NULL END as tccom000_company
from LogicalTableSharing lts
where lts.LogicalCompany = '''+@inputcompany+'''
'
EXEC sp_executesql @query
这显然给出了结果
期望的输出是
什么是正确的方法?
在 FROM
-less SELECT
中尝试子查询。为了提高性能,您需要在 (logicalcompany, tablecode)
上建立索引(或者反过来,这取决于哪个更具选择性)。
SELECT @inputcompany inputcompany,
(SELECT TOP 1
physicalcompany
WHERE logicalcompany = @inputcompany
AND tablecode = 'tsctm005'
ORDER BY <some criteria>) tsctm005_company,
(SELECT TOP 1
physicalcompany
WHERE logicalcompany = @inputcompany
AND tablecode = 'tccom000'
ORDER BY <some criteria>) tccom000_company;
您应该找到 <some criteria>
作为排序依据,以防有多个可能的行来决定哪一个优先。除非你每次 运行 查询另一个时可能只想要一个随机的,那就是。