2016-11-14 79 views
-1

站點表Sql - 分組數據

WBSNumber | SiteCode | ASNumber | SiteName

1 .......................... 11112 ........... 1 ..... ............ SiteA

1 .......................。 11112 .......... 2 ............... SiteA

2 ................. ........ 42342 .......... 2 ............... SiteB

2 ......... ................ 42342 .......... 1 ............... SiteB

2。 ........................ 42342 .......... 3 .............. 。SiteB

3 ......................... 78965 .......... 1 ...... ......... SiteC

4 ......................... 78954 ......... 。1 ............... Si teD

5 ......................... 112233 .......... 1 ....... ........ SiteE

5 ......................... 112233 .......... 2 ............... SiteE

我在努力編寫一些sql,它將返回所有網站的列表,並使用基於最高ASNumber的唯一WBSNumber。

在我的情況

所以,我期待下面的結果反饋:

WBSNumber | SiteCode | ASNumber | SiteName

1 .......................。 11112 .......... 2 ............... SiteA

2 ................. ........ 42342 .......... 3 ............... SiteB

3 ......... ................ 78965 .......... 1 ............... SiteC

4。 ........................ 78954 .......... 1 .............. 。SiteD

5 ......................... 112233 .......... 2 ...... ......... SiteE

這裏WBSNumber是唯一的,只選擇基於hig hest ASNUmber。

+2

你能否更好地格式化這個問題,並讓問題更明顯? –

+0

同時告訴我們你到目前爲止所嘗試的 –

回答

3

試試這個:

SELECT WBSNumber, SiteCode, MAX(ASNumber) ASNumber, SiteName 
FROM SiteTable 
GROUP BY WBSNumber, SiteCode, SiteName 

MAX用於獲取最高ASNumber等欄目必須包含在GROUP BY條款

+0

它不應該是'MAX(ASNumber)''ASNumber''或'MAX(ASNumber)'ASNumber''而不是'MAX(ASNumber)ASNumber'? – Angelo

+2

'as'不是必需的,也不是撇號/單引號。它是完全有效的解決方案。提供的siteCode和SiteName對於給定的WBSNumber總是相同的。 – xQbert

+0

您不需要在SQL Server中爲別名使用引號,前提是您的空間有別名,例如「AS號」 –

0

您可以使用分析來分配ROWNUMBER(從1開始通過增加一個)到每個wbsnumber爲最高ASnumber然後選擇的1 ROWNUMBER ...

with cte as 
(Select s.*, Row_number() over (partition by wbsNumber order by asNumber desc) RN) 
Select * from cte 
where RN = 1 

或之前分析... 我們爲每個WBSNumber生成最大AS數量的一組數據,並且僅允許內部聯接排除所有其他記錄。

SELECT s.* 
FROM Site S 
INNER JOIN (SELECT Max(ASNumber) mASNumber, WBSNumber From site Group by WBSNumber) S2 
on S.WBSNumber = S2.WBSNumber 
and S.ASNumber = S2.mASNumber 

該方法確保表中的所有其他數據都被保留;所以如果您爲最高的ASNumber擁有不同的SiteName,我們只會獲得最高AS號的名稱。

0

根據您的示例數據,WBS,SiteCode和SiteName都是彼此唯一的。所以,你只需要最大ASNnumber

select distinct 
    WBSNumber, 
    SiteCode, 
    SiteName, 
    Max(ASNumber) as ASNumber 
from SiteTable 
group by 
    WBSNumber, 
    SiteCode, 
    SiteName 

如果不是的話,你可以只得到最大WBS以及...

select distinct 
    Max(WBSNumber) as WBSnumber, 
    SiteCode, 
    SiteName, 
    Max(ASNumber) as ASNumber 
from SiteTable 
group by 
    SiteCode, 
    SiteName 

否則,我們需要更大的數據樣本...或使用RowNumber()