I have the following table:
+----+----------+
| id | feature |
+----+----------+
| 1 | 10 |
| 1 | 20 |
| 2 | 20 |
| 3 | 40 |
| 4 | 50 |
| 5 | 60 |
+----+----------+
And I'd like to have the id's that have both features 10 and 20. So, not just the results that have 10 or 20, but I'd like to have the result of the id's that have both 10 and 20.
The easiest way would be to GROUP BY
the id
and use HAVING
:
SELECT id
FROM table_name
WHERE feature IN (10,20)
GROUP BY id
HAVING COUNT(distinct feature) = 2
Another way to select the id that have features 10 and 20 you can do so
select id
from table1
group by id
having sum(feature = 10)
and sum(feature = 20)
One more way to do that
SELECT ID,
stuff(
(
select ','+ convert(varchar,feature) from table where Id = t.Id for XML path('')
),1,1,'') [comma_sep_feature]
FROM [table] t
group by id
you can insert this value in #temp and add where clause comma_sep_feature = '10, 20' like below
SELECT ID,
stuff(
(
select ','+ convert(varchar,feature) from yourtable where Id = t.Id for XML path('')
),1,1,'') [comma_sep_feature]
into #tem
FROM [yourtable] t
group by id
select * from #tem where comma_sep_feature = '10,20'
drop table #tem
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.