Сравните две таблицы в одном столбце, которые не совпадают и дают альтернативные строки - sql

Мое требование, как показано ниже,

Мне нужно, чтобы данные сравнивались из двух идентичных таблиц, где дано имя версии и все остальные столбцы совпадают, кроме [Значение]. Требуется отображаться в чередующихся строках с "ДА" "Нет"

Мой запрос:

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]"

Может ли кто-нибудь помочь.? Я не получаю требуемый вывод. Я не знаю, где я пропускаю.. на стыковках

Структура таблицы и условия

[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

1 ответ

Трудно сказать без данных для изучения, но похоже, что это одно и то же. Просто один неопубликованный запрос, занятый, но простой.

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 поле должно быть последним и нисходящим - "Да" перед "Нет".

Другие вопросы по тегам