Sql server TSQL——在表中查找一列中有多个值的记录,并且在另一列中至少有一个特定值出现
TSQL-在表中查找一列中有多个值的记录,并且在另一列中至少有一个特定值出现 如果我有: ourDB.dbo.ourTable与col1、col2和col3 我想找到这样的事件 *col1的值出现多次 *至少有一个col2='Val1'的实例至少出现一次 TSQL-在表中查找特定的引用 因此,我们可以从以下几点开始:Sql server TSQL——在表中查找一列中有多个值的记录,并且在另一列中至少有一个特定值出现,sql-server,tsql,group-by,having-clause,Sql Server,Tsql,Group By,Having Clause,TSQL-在表中查找一列中有多个值的记录,并且在另一列中至少有一个特定值出现 如果我有: ourDB.dbo.ourTable与col1、col2和col3 我想找到这样的事件 *col1的值出现多次 *至少有一个col2='Val1'的实例至少出现一次 TSQL-在表中查找特定的引用 因此,我们可以从以下几点开始: Select col1, col2, col3 FROM ourDB.dbo.ourTable having count(col1) > 1 WHERE (col2 = 'V
Select col1, col2, col3
FROM ourDB.dbo.ourTable
having count(col1) > 1
WHERE
(col2 = 'Val1')
Group by col1, col2, col3
Order by col1, col2, col3
这将发现col2总是与“Val1”一起出现,但如何将其推广到至少有一次具有“Val1”的col2?您必须仅按col1分组,并通过条件聚合获得所需的所有col1值:
SELECT * FROM ourDB.dbo.ourTable
WHERE col1 IN (
SELECT col1
FROM ourDB.dbo.ourTable
GROUP BY col1
HAVING COUNT(*) > 1 AND SUM(CASE WHEN col2 = 'Val1' THEN 1 END) > 0
)
ORDER BY col1, col2, col3
如果只需要col2='Val1'的行:
下面的替代方法,最初来自同事,我对其进行了一些修改。 注:不一定比其他公认的答案更好,只是方法不同而已
-- GENERIC_JOIN_WITH_SPECIFIC_COUNTS_Q_v_0.sql
USE [ourDB]
SELECT COUNT( distinct titleid) -- also could use COUNT(*)
from ourTable
WHERE
(
(1 <
(
select count( col1)
from ourTable
GROUP BY col1
HAVING (count(col1 > 1)
-- more than one col1 occurence
)
)
AND
(0 <
(
select count(*) from ourTable
WHERE( col2 = 'Val1' )
-- at least one occurence of col2 having 'Val1'
)
)
)
还是不知道为什么这里会有反对票?
-- GENERIC_JOIN_WITH_SPECIFIC_COUNTS_Q_v_0.sql
USE [ourDB]
SELECT COUNT( distinct titleid) -- also could use COUNT(*)
from ourTable
WHERE
(
(1 <
(
select count( col1)
from ourTable
GROUP BY col1
HAVING (count(col1 > 1)
-- more than one col1 occurence
)
)
AND
(0 <
(
select count(*) from ourTable
WHERE( col2 = 'Val1' )
-- at least one occurence of col2 having 'Val1'
)
)
)