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> 作为排序依据,以防有多个可能的行来决定哪一个优先。除非你每次 运行 查询另一个时可能只想要一个随机的,那就是。