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,但运气不佳。请建议我提出问题