Sql server 基于行值合并表

Sql server 基于行值合并表,sql-server,Sql Server,下面是我的表格结构 declare @t1 table (id int identity,val int not null,datatype1 int null,datatype2 int null,datatype3 int null,datatype4 int null,type int) declare @t2 table (id int identity,val int not null,datatype1 int null,datatype2 int null,dataty

下面是我的表格结构

declare @t1 table (id int identity,val int not null,datatype1  int null,datatype2  int null,datatype3  int null,datatype4  int null,type int)
declare @t2 table (id int identity,val int not null,datatype1  int null,datatype2  int null,datatype3  int null,datatype4  int null,type int)
insert into @t1 values (10,1,0,0,0,1),(31,1,0,0,0,1),(20,1,0,0,0,1),(30,1,0,0,0,1)
insert into @t2 values (31,0,1,0,0, 2),(4,0,0,1,0,3),(12,0,0,0,1,4),(31,0,0,0,1,4)

select * from @t1;
select * from @t2;
我将2个表数据与下面的查询相结合

select val,max(datatype1) datatype1,max(datatype2)datatype2,max(datatype3)datatype3,max(datatype4)datatype4 from (
select * from @t1

union all

select * from @t2
 ) as data group by val
如果val是31,type=2在@t2中,我需要更改逻辑, 对于这些情况,我需要得到2行val 31,其他情况下,只有不同的值

预期结果:

val datatype1   datatype2   datatype3   datatype4
4    0             0            1        0
10   1             0            0        0
12   0             0            0        1
20   1             0            0        0
30   1             0            0        0
31   1             0            0        1
31   0             1            0        0       --- only if in @t2 val =31 and type=2 

请告诉我,KNWWWAT只需根据提供的数据更改为值31和类型=2

select val,
  max(datatype1) datatype1,
  max(datatype2) datatype2,
  max(datatype3) datatype3,
  max(datatype4) datatype4 
from (
  select 't1' AS tab_name, * from @t1
  union all
  select 't2' AS tab_name, * from @t2
 ) as data 
group by val, CASE WHEN tab_name = 't2' and val=31 and type=2 THEN 1 END; 
              -- creating subgroup for this specific conditions

虽然您确实包含了样本数据,但实际上很难看到这些数据是什么。谢谢。。。我会检查,,,但我需要基于@t2进行分组,val=31,type=2@Ajt这根本不是问题,只需在
UNION all
part中添加一个表名作为鉴别器即可。非常感谢@Lukasz.。你救了我一天!。。(祝贺100k)还有一个帮助…实际上我错误地提到了val=31,它是任意数字,type=2保持不变。。。我已将val=31改为count(*)>1,但运气不佳。请建议我提出问题