我有一个数字列表,我已将它们加载到数据库的临时表中。我需要查找这些数字是否在两个不同的表中以及这些表的不同字段中。例如...
field1 值(1、2、3、4、5、6,... n)
表1 ID,n1,n2,n3,n4,n5,n6,n7,n8
表2 ID,n1,n2,n3,n4
ID
中的Table1
和Table2
相同。
field1
中#TemporaryTable
上的值可以位于两个表中任何一个的任何字段中。
此外,临时表中的数字是平坦的,而在其他两个表的字段中,数字可以带有破折号-
。我已经使用REPLACE (n1, '-', '')
我只想显示ID
和数字。如果两者都不存在,我就不显示它。
希望你能帮助我。
答案 0 :(得分:0)
您的最终动机是什么?如果您确实发现必须这样做,那么也许您想重新考虑您的设计。但是,只是为了好玩:
首先,让我们实际创建这些表:
create table #table1 (
ID int identity(1,1),
n1 int, n2 int, n3 int, n4 int,
n5 int, n6 int, n7 int, n8 int
);
insert #table1 values
(1,2,3,4,5,6,7,8),
(5,6,7,8,9,10,11,12),
(9,10,11,12,13,14,15,16);
create table #table2 (
ID int identity(1,1),
n1 int, n2 int, n3 int, n4 int
);
insert #table2 values
(1,2,3,4),
(3,4,5,6),
(7,8,9,10);
现在,通过不旋转将其垂直化,以便将所有值都放在一栏中:
declare @verticalized table (
tbl int,
id int,
col char(2),
val int
);
insert @verticalized
select 1 tbl, id, col, val
from #table1
unpivot (val for col in (n1,n2,n3,n4,n5,n6,n7,n8)) up
union all
select 2, id, col, val
from #table2
unpivot (val for col in (n1,n2,n3,n4)) up
然后进行一些汇总以回答您的问题。
select val,
tbls = count(distinct tbl), -- # of tables value is in
cols = count(distinct col), -- # of columns value is in
-- specific locations you can find the value
locations = stuff((
select
distinct ',T' + convert(char(1),tbl) + '.C' + col
from @verticalized sub
where sub.val = v.val
for xml path('')
),1,1,'')
from @verticalized v
group by val
尤其是您提到“ field1”中的存在。您可能可以从那里工作代码。