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