2017-02-13 79 views
2

我需要一个来自MS SQL Server中不同查询的值。 您可以看到,我创建了查询但结果在“ManifestNo”为5时有两个值。 如果“ManifestNo”列包含“A”,则写入“A”,否则写入“B”。Sql服务器独特的一个值

感谢您的支持。

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 

我需要见下表:

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

粘贴查询 –

+1

请使用格式化的文本表中的数据 - 而不是图像。 – jarlh

+0

'(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