我的要求如下,
我需要从两个相同的表中比较数据,其中给出版本名称&除[Value]之外的所有其他列匹配。 它需要以“是”“否”显示在备用行中
我的查询:
Select [Versions],[Profile],Value,[Step1],[Step2],[Step3],[Step4],[Step5],[Step6],[Step7],[UploadedBy]
from
(
SELECT a.[Versions],a.[Profile],a.[Value] ,a.[Step1],a.[Step2],a.[Step3],a.[Step4],a.[Step5],
a.[Step6],a.[Step7] ,a.[UploadedBy],a.[UploadedOn] FROM [CREP].[dbo].[T_CRI_RollenProfile_CurrentProfiles] as a
inner join [CREP].[dbo].[T_CRI_RollenProfile_MasterProfiles] as b
on
( a.[Profile]=b.[Profile] and a.[Step1]=b.[Step1] and a.[Step2]=b.[Step2] and a.[Step3]=b.[Step3] and
a.[Step4]=b.[Step4]and a.[Step5]=b.[Step5] and a.[Step6]=b.[Step6] and a.[Step7]=b.[Step7])
where a.Value<>b.Value and a.[Versions]='Current_20150318_v2'
union
SELECT a.[Versions],a.[Profile],a.[Value] ,a.[Step1],a.[Step2],a.[Step3],a.[Step4],
a.[Step5],a.[Step6],a.[Step7] ,a.[UploadedBy],a.[UploadedOn]
FROM [CREP].[dbo].[T_CRI_RollenProfile_MasterProfiles] as a
inner join [CREP].[dbo].[T_CRI_RollenProfile_CurrentProfiles] as b
on ( a.[Profile]=b.[Profile] and a.[Step1]=b.[Step1] and a.[Step2]=b.[Step2] and a.[Step3]=b.[Step3]
and a.[Step4]=b.[Step4]and a.[Step5]=b.[Step5] and a.[Step6]=b.[Step6] and a.[Step7]=b.[Step7])
where a.[Versions]='Master_20150318_v4' and a.Value<>b.Value) as data
group by [Profile],[Step1],[Step2],[Step3],[Step4],[Step5],[Step6],[Step7],[Versions],Value,[UploadedBy]"
有人可以提供帮助。我没有得到所需的输出。我不知道我错过了什么地方......联合
表格结构&amp;条件
[dbo].[T_CRI_RollenProfile_CurrentProfiles] a.[Versions]='Current_20150318_v2'
[dbo].[T_CRI_RollenProfile_MasterProfiles] a.[Versions]='Master_20150318_v4'
a.[Profile]=b.[Profile] and a.[Step1]=b.[Step1] and a.[Step2]=b.[Step2] and
a.[Step3]=b.[Step3] and a.[Step4]=b.[Step4]and a.[Step5]=b.[Step5] and
a.[Step6]=b.[Step6] and a.[Step7]=b.[Step7])where a.[Versions]="[]" and a.Value<>b.Value
答案 0 :(得分:0)
很难说没有数据要检查,但这看起来可能是同样的事情。只是一个未经验证的查询,繁忙但很简单。
SELECT a.Versions, a.Profile, a.Value, a.Step1, a.Step2, a.Step3, a.Step4, a.Step5,
a.Step6, a.Step7, a.UploadedBy
FROM CREP.dbo.T_CRI_RollenProfile_CurrentProfiles as a
join CREP.dbo.T_CRI_RollenProfile_MasterProfiles as b
on a.Profile = b.Profile
and a.Step1 = b.Step1
and a.Step2 = b.Step2
and a.Step3 = b.Step3
and IsNull( a.Step4, 'null' ) = IsNull( b.Step4, 'null' )
and IsNull( a.Step5, 'null' ) = IsNull( b.Step5, 'null' )
and IsNull( a.Step6, 0 ) = IsNull( b.Step6, 0 ) -- if step6 is a numeric field
and IsNull( a.Step7, 'null' ) = IsNull( b.Step7, 'null' )
where a.Value<>b.Value
and a.Versions in( 'Current_20150318_v2', 'Master_20150318_v4' )
order by Profile, Step1, Step2, Step3, Step4, Step5, Step6, Step7, UploadedBy, Value desc;
在屏幕截图中,Step3显示两次,一次显示数据,一次不显示。从显示的两个整行中,我不得不假设如果字段显示数据,那么它是非NULL。因此,假设您希望两个表中的同一字段中的NULL计为相同值,则必须使用IsNull
。对于第二个参数,请使用在字段中无法找到的值作为实际值。它必须与该领域的类型相同。因此,如果如图所示,Step6是数字字段,则第二个参数也必须是数字。我显示零,但如果这是一个可能的实际值,请选择其他内容。
我不明白的是分组。是否可以在表中具有多个行,并且所有字段中的数据都相同,并且您希望将它们合并到一个输出行中?我猜不是,但如果是这样,只需在DISTINCT
之后添加SELECT
就可以了。
您确实需要order by
所有字段除了 Versions
。 Value
字段应该是最后一个和下降 - '否'之前是'否'。