首页 > 解决方案 > MS-SQL 获取特定于案例的值

问题描述

我们有一个表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

这显然给出了结果

在此处输入图像描述

所需的输出是

在此处输入图像描述

什么是正确的方法?

标签: sql-serverloopsvariablescase-statement

解决方案


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>order by 来决定哪一个优先。除非您每次运行另一个查询时可能只想要一个随机查询,否则就是这样。


推荐阅读