Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
显示一对多SQL查询中最频繁的项_Sql_Sql Server_One To Many - Fatal编程技术网

显示一对多SQL查询中最频繁的项

显示一对多SQL查询中最频繁的项,sql,sql-server,one-to-many,Sql,Sql Server,One To Many,大家好,提前谢谢你们的帮助。这是我的设想: 我有三个链接表,分别显示生产规格和每种墨水的类型。每个规格可以有不同数量的墨水(从1到10),这可能与其他规格相同,也可能不同。我的目标是使每个规范能够显示规范名称和更频繁出现的墨水 例如,对于等级库XYZ: |=====|=====| ¦SPEC ¦INK ¦ |=====|=====| ¦XYZ ¦blue ¦ ¦XYZ ¦red ¦ ¦XYZ ¦red ¦ ¦XYZ ¦red ¦ ¦XYZ ¦brown¦ |=====|====

大家好,提前谢谢你们的帮助。这是我的设想:

我有三个链接表,分别显示生产规格和每种墨水的类型。每个规格可以有不同数量的墨水(从1到10),这可能与其他规格相同,也可能不同。我的目标是使每个规范能够显示规范名称和更频繁出现的墨水

例如,对于等级库XYZ:

|=====|=====|
¦SPEC ¦INK  ¦
|=====|=====|
¦XYZ  ¦blue ¦
¦XYZ  ¦red  ¦
¦XYZ  ¦red  ¦
¦XYZ  ¦red  ¦
¦XYZ  ¦brown¦
|=====|=====|
我只想展示:

|=====|=====|
¦SPEC ¦INK  ¦
|=====|=====|
¦XYZ  ¦red  ¦
|=====|=====|
各表的链接如下:

SELECT tblStudioInput.SpecNo
    , tblListInkSystem.Ink
FROM tblStudioInput
INNER JOIN tblStudioInputColour
    ON tblStudioInput.stID = tblStudioInputColour.StudioInputID
INNER JOIN tblListInkSystem
    ON tblStudioInputColour.InkSystem = tblListInkSystem.ID
再次感谢大家

SELECT SPEC, INK
FROM
  (
    SELECT SPEC, INK,
           DENSE_RANK() OVER (ORDER BY COUNT(*) DESC) rn
    FROM Table1
    GROUP BY SPEC, INK
  ) s
WHERE rn = 1
来源


[更新]您可以尝试以下方法:

select top 1 with ties
    spec, ink
from
    (
      select
          spec, ink, count(*) n
      from
          tmp
      group by
          spec, ink
    ) t
order by
    n desc
[更新]

或者毫无意义

with q as (
    select
        spec, ink, count(*) n
    from
        tmp
    group by
        spec, ink
)

select
    spec, ink
from
    q
where
    n = (
        select
            max(n)
        from
            q
    )
或者没有CTE

select
    spec, ink
from
    tmp
group by
    spec, ink
having
    count(*) = (
        select
            max(n)
        from
            (
                select
                    count(*) n
                from
                    tmp
                group by
                    spec, ink
            ) t
    )

谢谢你的及时答复。我想我们就快到了:这个查询在一次一个规格的基础上运行得很好,但是如果我对所有规格都运行它,它只返回63个规格(5000个规格中有63个规格)以及相对的墨水类型。我也不知道为什么会有63人……谢谢你的投入。您的查询只返回1条记录(1个规格+1个墨水),而我试图实现的是获得所有5000多个规格以及与之相关的最频繁墨水。再次感谢您的输入。这两个查询都只返回63个规格(与John的解决方案相同),而我预期的是数千个规格。至于领带,这不是一个问题,因为所有的规格都会有一个占主导地位的墨水类型。请发布一些测试数据来调试查询该查询是Crystal报告中需要的,因为它非常紧急,我不得不在Crystal本身内进行不同的排序(有点慢,但它可以完成任务)。无论如何,谢谢你的帮助,ааааааааааааа107