sql-server - 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
这显然给出了结果
所需的输出是
什么是正确的方法?
解决方案
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 来决定哪一个优先。除非您每次运行另一个查询时可能只想要一个随机查询,否则就是这样。
推荐阅读
- javascript - 为密码中的特定字符设置规则
- cordova - 本地存储未保存在科尔多瓦
- java - 如何在 android 中以编程方式更改 Widget.Toolbar 主题?
- c# - Microsoft.AspNetCore.Authorization.AuthorizeAttribute 不包含“IsAuthorized”方法
- python - 任何人都可以帮助修复我的不和谐 python bot 宣布嵌入命令吗?
- unix - 我的 grep Unix 命令的输出是 1,即使它应该是 24。需要有关如何解决此问题的帮助
- c - gcc mingw 与程序集结合时会产生垃圾输出
- android - 如何从 JSON 文件中获取数据?
- apache-spark - 如何有效地合并 PySpark 数据框?
- java - 如何让 MediaPlayer 重复播放声音?