Sql server T-SQL中的多重分组
我们如何检查树木、种子、花朵和年份组是否存在FLRNO,并且所有可用注释1都存在于一个组中 及 同一组树、种子、花和年份有注释3,该注释与所有可用注释1一起存在 对于树苹果神,没有“SE;臭味花”可供选择,因此整个组别都被排除在输出之外。 预期产出: /* */ --已尝试查询,但未给出结果Sql server T-SQL中的多重分组,sql-server,tsql,Sql Server,Tsql,我们如何检查树木、种子、花朵和年份组是否存在FLRNO,并且所有可用注释1都存在于一个组中 及 同一组树、种子、花和年份有注释3,该注释与所有可用注释1一起存在 对于树苹果神,没有“SE;臭味花”可供选择,因此整个组别都被排除在输出之外。 预期产出: /* */ --已尝试查询,但未给出结果 'BANANA', 'Nis', 'Tit', '2004', '57101', 'Sweet Smell Flower', '' 'BANANA', 'Nis', 'Tit',
'BANANA', 'Nis', 'Tit', '2004', '57101', 'Sweet Smell Flower', ''
'BANANA', 'Nis', 'Tit', '2004', '57101', 'Bad Smell flower' , ''
'BANANA', 'Nis', 'Tit', '2004', 'B0019B', 'Sweet Smell Flower',
'CATCH ME'
'BANANA', 'Nis', 'Tit', '2004', 'B0019B', 'Bad Smell flower', 'CATCH ME'
目前还不清楚你想要实现什么,但至少这会让你得到这样的结果:
; WITH CTE AS (
SELECT [TREE], SEED, FLOWER, YEAR,
COUNT(DISTINCT hash) AS grp_count,
--COUNT(*) AS grp_count,
COUNT(DISTINCT FLRNO) AS part_grp_count,
COUNT(DISTINCT COMMENT1) AS COMMENT1_grp_count,
COUNT(DISTINCT COMMENT3)AS COMMENT3_grp_count
FROM #temp
GROUP BY [TREE], SEED, FLOWER, YEAR
)
SELECT *
FROM #temp t
WHERE EXISTS (SELECT *
FROM CTE
WHERE CTE.[TREE] = t.[TREE]
AND CTE.FLOWER = t.FLOWER
AND CTE.SEED = t.SEED
AND CTE.YEAR = t.YEAR
AND CTE.grp_count = CTE.COMMENT1_grp_count * CTE.COMMENT3_grp_count * CTE.part_grp_count
AND CTE.COMMENT1_grp_count > 1)
中的示例请任何人提出如何实现这一目标的建议。如果可能的话,你应该尝试解决这个问题,例如“这是存在的,所有可用的评论1都在一个组中出现”没有真正的意义。谢谢。我试图实现的结果集应仅在满足所有三个标准时出现:1:对于一组树、种子、花和年份,应始终有多个不同的FLRNO;2:一组树、种子、花和年份中的FLRNO数量应与组中的所有可用注释1一致;3:对于一组树、种子,花与年,所有评论3的编号,也将与所有评论一起提供。11 ST与我回答中的评论1相似,阅读你的评论5次,无法理解你想说什么。
; WITH CTE AS (
SELECT [TREE], SEED, FLOWER, YEAR,
COUNT(DISTINCT hash) AS grp_count,
--COUNT(*) AS grp_count,
COUNT(DISTINCT FLRNO) AS part_grp_count,
COUNT(DISTINCT COMMENT1) AS COMMENT1_grp_count,
COUNT(DISTINCT COMMENT3)AS COMMENT3_grp_count
FROM #temp
GROUP BY [TREE], SEED, FLOWER, YEAR
)
SELECT *
FROM #temp t
WHERE EXISTS (SELECT *
FROM CTE
WHERE CTE.[TREE] = t.[TREE]
AND CTE.FLOWER = t.FLOWER
AND CTE.SEED = t.SEED
AND CTE.YEAR = t.YEAR
AND CTE.grp_count = CTE.COMMENT1_grp_count * CTE.COMMENT3_grp_count * CTE.part_grp_count
AND CTE.COMMENT1_grp_count > 1)
select * from temp t
where
(
select top 1 count(distinct comment1)
from temp t2
where t2.tree = t.tree
group by t2.comment3
order by 1 asc
) > 1