【发布时间】:2019-08-22 13:52:16
【问题描述】:
我正在尝试将一个字符串转换为有效列。
如您所见,我需要得到类似'mo._olddb_uid_'+nu._olddb_name_db 的东西,它应该使用mo._olddb_uid_001 列
我怎样才能做到这一点:
SELECT *
FROM [PI_CONSOLIDATION].[dbo].[new_unite] nu
LEFT JOIN [PI_CONSOLIDATION].[dbo].[Motif_Orientation] mo ON CONCAT('mo._olddb_uid_',nu._olddb_name_db) = CONCAT(nu._olddb_name_db,'_',nu.id_motif_orientation)
WHERE nu.nom_res = 'TEST' and nu.prenom_res = 'Foobar'
谢谢
编辑:
我有 18 个应用程序,每个应用程序都有他的数据库。这些应用程序几乎与不同的数据相似,但有时数据也可以在其他来源上找到。
所以[new_unite]有病人的id、id_group和源数据库
id_resident id_groupe_res _olddb_name_db
728 31 src1
629 21 src6
731 25 src9
934 12 src18
...
另一个表有一些参数,它们具有相同的参数,但 ID 不同,具体取决于源的 DB。
所以这个查询主要只是为了测试数据是否正确存储在只有一个数据库并且所有数据合并的最终应用程序中
id_motif_orientation label
1407 Famille
1410 Structures d'hébergement
1422 Etablissement d'Education Spéciale
【问题讨论】:
-
样本数据和预期结果会有所帮助。
-
SQL 不是这样工作的。文字字符串不能用于替换对象的名称(也不能用于变量)。
DECLARE @table sysname = N'dbo.MyTable'; SELECT * FROM @table;不会SELECT来自dbo.MyTable的行它会给出关于未声明的表变量@table的错误。这似乎是您真正拥有的是需要修复的糟糕的数据库设计。 -
我添加了使用的数据......并且我认为当我们处理18个不同数据库的合并时设计符合预期
-
那是你的问题@3pepe3,你认为设计是正确的。你不应该有很多
*_src列,你应该有一个src列,其值类似于1、2、3等。然后你就可以轻松地做你需要的事情到。
标签: sql sql-server concat