1

我在 TSql 方面需要一点帮助 :)

SELECT TOP (100) PERCENT HSW, NAZWA, COUNT(HSW) AS TEST 
FROM _Katalogi.dbo.ZBIOR_NAZW 
WHERE hsw = '3768917680' 
GROUP BY HSW, NAZWA

现在我得到了这个结果

3768917680  PODKŁADKA UTWARDŹ.          1
3768917680  ŚRUBA SAMOZABEZPIECZJĄCA    1
3768917680  PODKŁADKA                  82
3768917680  PODKŁADKA 3/8"              1
3768917680  PODKŁADKA UTWARDZONA     2883
3768917680  ŚRUBA                       2

现在在这个子查询中我只需要

3768917680  PODKŁADKA UTWARDZONA         2883

以最大 COUNT(HSW) 作为测试

我瘦了我问的有点不对

SELECT TOP (100) PERCENT HSW, NAZWA, COUNT(HSW) AS TEST 
FROM _Katalogi.dbo.ZBIOR_NAZW 
GROUP BY HSW, NAZWA

目标是按 HSW 列从表中仅取顶部 NAZWA。就像你看到的那样,我有一个 HSW 号码和许多名字,我只需要得到最流行的名字:) 但在一个 HSW 组内。有很多 HSW 号码有很多不同的名称,我只需要列出带有 TOP 名称的 HSW 号码 :) 有什么想法吗?

不同的方法:) 表中的数据

3768917680  PODKŁADKA UTWARDŹ.          
3768917680  ŚRUBA SAMOZABEZPIECZJĄCA    
3768917680  PODKŁADKA                  
3768917680  PODKŁADKA                  
3768917680  PODKŁADKA                  
3768917680  PODKŁADKA 3/8"              
3768917680  PODKŁADKA UTWARDZONA     
3768917680  ŚRUBA                       
3768917681  PODKŁADKA UTWARDŹ.          
3768917681  PODKŁADKA UTWARDŹ.  
3768917681  ŚRUBA SAMOZABEZPIECZJĄCA    
3768917682  PODKŁADKA                  
3768917683  PODKŁADKA 3/8"              
3768917684  PODKŁADKA UTWARDZONA     
3768917684  ŚRUBA                       
3768917684  ŚRUBA

就像你看到的,这是在 emess 上,所以我只需要得到什么是粘稠的,所以组中最受欢迎的名字

3768917680  PODKŁADKA

3768917681  PODKŁADKA UTWARDŹ. 

3768917682  PODKŁADKA                  

3768917683  PODKŁADKA 3/8"

3768917684  ŚRUBA

所以目标取一个带有顶级(最受欢迎)名称的HSW号码

4

3 回答 3

3
SELECT  *
FROM    (
        SELECT  ROW_NUMBER() OVER (PARTITION BY HSW ORDER BY CNT DESC) rn
        ,       *
        FROM    (
                SELECT  COUNT(*) OVER (PARTITION BY HSW, NAZWA) as CNT
                ,       *
                FROM    FROM _Katalogi.dbo.ZBIOR_NAZW 
                ) as SubQuery1
        ) as SubQuery2
WHERE   rn = 1 -- Only top CNT per HSW
于 2013-06-20T12:37:30.140 回答
2

像这样的东西?

SELECT HSW, NAZWA, COUNT(HSW) AS TEST 
FROM _Katalogi.dbo.ZBIOR_NAZW 
WHERE hsw = '3768917680' 
GROUP BY HSW, NAZWA
HAVING  COUNT(HSW) = 
(
    SELECT TOP 1 COUNT(HSW) AS TEST 
    FROM _Katalogi.dbo.ZBIOR_NAZW 
    WHERE hsw = '3768917680' 
    GROUP BY HSW, NAZWA
    ORDER BY COUNT(HSW) DESC
)
于 2013-06-20T12:39:04.570 回答
0

您还可以使用分析函数基于 COUNT 创建一个 RowRank,如果存在平局,这将获取所有结果,并且表现良好。

如果您想要所有 HSW 的最佳结果,而不仅仅是列出的结果,您可以使用:

SELECT HSW, NAZWA, TEST
FROM (
     SELECT  HSW, NAZWA, COUNT(HSW) AS TEST, Rank() OVER (PARTITION BY HSW ORDER BY COUNT(HSW) DESC) as RowRank
     FROM _Katalogi.dbo.ZBIOR_NAZW 
     GROUP BY HSW, NAZWA
     )sub
WHERE RowRank = 1

演示: SQL 小提琴

如果您不想在出现平局的情况下出现多个结果,请将 RANK() 更改为 ROW_NUMBER(),然后它将为每个 HSW 仅选择 1。

编辑:缺少')'

于 2013-06-20T12:51:40.533 回答