2016-11-14 40 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()