2017-02-13 77 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