2017-02-13 12 views
2

Мне нужно одно значение из отдельного запроса в MS SQL Server. Вы можете видеть, я создал запрос, но результат имеет два значения в «Манифест». 5. Если столбец «ManifestNo» включает «A», напишите «A», иначе напишите «B».Sql Server Distinct One Value

Спасибо за вашу поддержку.

SELECT distinct a.ManifestNo ,CASE WHEN a.[Active]='A' THEN 'A' ELSE 'P' END AS ActiveState 
FROM [YOTK_WH_Trace].[dbo].[Orders] as a INNER JOIN RefTable as b ON a.WEBARD1_PARTNO = b.UrunNo 
where [ManifestYear]=2017 and [ManifestMonth]=02 and [ManifestDay]=13 and (b.State = 1) 
order by a.ManifestNo 

Images

ManifestNo ActiveState 
1   P 
2   A 
3   A 
4   A 
5   A 
5   P 
6   A 

I Need ниже таблице:

ManifestNo ActiveState 
1   P 
2   A 
3   A 
4   A 
5   A 
6   A 
+2

вставить запрос –

+1

Пожалуйста, используйте отформатированный текст для данных таблицы - не изображения. – jarlh

+0

Существует 2 различных значения '(MinifestNo, ActiveState)' – McNets

ответ

1

Удалить Distinct ключевое слово и использовать GROUP BY положение и MIN агрегатной функции

SELECT a.ManifestNo ,MIN(CASE WHEN a.[Active]='A' THEN 'A' ELSE 'P' END) AS ActiveState 
FROM [YOTK_WH_Trace].[dbo].[Orders] as a 
INNER JOIN RefTable as b ON a.WEBARD1_PARTNO = b.UrunNo 
where [ManifestYear]=2017 and [ManifestMonth]=02 and [ManifestDay]=13 and (b.State = 1) 
GROUP BY a.ManifestNo 
order by a.ManifestNo 
+0

Wooouuw.! Спасибо !! Ты спасешь мой день :) Я люблю «StackOverFlow» !! –

0

другое решения

select * from (
    SELECT a.ManifestNo ,CASE WHEN a.[Active]='A' THEN 'A' ELSE 'P' END AS ActiveState, 
    row_number() over(partition by a.ManifestNo order by CASE WHEN a.[Active]='A' THEN 'A' ELSE 'P' END) as rang 
    FROM [YOTK_WH_Trace].[dbo].[Orders] as a INNER JOIN RefTable as b ON a.WEBARD1_PARTNO = b.UrunNo 
    where [ManifestYear]=2017 and [ManifestMonth]=02 and [ManifestDay]=13 and (b.State = 1) 
) tmp 
where tmp.rang=1 
order by tmp.ManifestNo