此问题的表结构:
TABLE Roster; FIELDS {IDNum},{FavChs},{2ndFavChs},{3rdFavChs}我正在尝试确定有多少记录在三个字段中的一个字段中具有相同的值。如果我只看一列,很简单:
Select FavChs, Count(IDNum)
FROM Roster
WHERE FavChs is not null
Group by FavChs但是,我需要检查是否在其他记录的三个字段中的任何一个字段中找到了相同的值。它位于哪个字段并不重要,重要的是它位于其中一个字段中。因此,如果表是:
| IDNum | FavChs | 2ndFavChs | 3rdFavChs |
|-------|--------|-----------|-----------|
| 1 | Swiss | Brie | Feta |
| 2 | Swiss | Feta | Cheddar |
| 3 | Cheddar| Swiss | Cheddar |
| 4 | Feta | Swiss | (null) |
| 5 | Feta | (null) | (null) |
| 6 | Brie | Cheddar | (null) |
| 7 | Swiss | Swiss | Swiss |
| 8 | Swiss | Brie | Cheddar |我需要结果来证明:
| Cheese | Count |
|--------|-------|
| Brie | 3 |
| Cheddar| 4 |
| Feta | 4 |
| Swiss | 6 |发布于 2020-01-15 06:37:18
试试这个:
select c.Cheese, count(r.IDNum) as Count
from
(
select distinct FavChs as Cheese from Roster
union
select distinct 2ndFavChs as Cheese from Roster
union
select distinct 3rdFavChs as Cheese from Roster
) c
join Roster r
on (r.FavChs = c.Cheese or r.2ndFavChs = c.Cheese or r.3rdFavChs = c.Cheese)
group by c.Cheese记住使用Union而不是Union All,以确保查询C中的所有值都是不同的
https://stackoverflow.com/questions/59742693
复制相似问题