我有两个如下表。
表格历史记录:
+------+------+------+-----+------+------+
| fir | sec | thi | fou | fif | six |
+------+------+------+-----+------+------+
| 10 | 23 | 29 | 33 | 37 | 40 |
| 9 | 13 | 21 | 25 | 32 | 42 |
| 11 | 16 | 19 | 21 | 27 | 31 |
| 14 | 27 | 30 | 31 | 40 | 42 |
| 16 | 24 | 29 | 40 | 41 | 42 |
| 14 | 15 | 26 | 27 | 40 | 42 |
| 2 | 9 | 16 | 25 | 26 | 40 |
| 8 | 19 | 25 | 34 | 37 | 39 |
| 2 | 4 | 16 | 17 | 36 | 39 |
| 9 | 25 | 30 | 33 | 41 | 44 |
| 1 | 7 | 36 | 37 | 41 | 42 |
| 2 | 11 | 21 | 25 | 39 | 45 |
| 22 | 23 | 25 | 37 | 38 | 42 |
| 2 | 6 | 12 | 31 | 33 | 40 |
| 3 | 4 | 16 | 30 | 31 | 37 |
表格统计信息:
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
所以表历史记录有6列。所有6列的值都不同,并且可以填充1到45之间的值。 表格统计信息的ID列从1到45。
我想要的是从表历史记录中计数“ id”值,并因此将另一列作为计数。
我尝试过
select id from stats as num right join (select count(*) as count from history where fir = num.id OR sec = num.id OR thi = num.id OR fou = num.id OR fif = num.id OR six = num.id) as r
但是没有用。
我可以通过一个查询获得想要的结果吗?
答案 0 :(得分:2)
您可以尝试在“日历” stats
表和当前数据的并集之间进行左联接。
SELECT
s.id,
COUNT(t.val) AS count
FROM stats s
LEFT JOIN
(
SELECT fir AS val FROM history UNION ALL
SELECT sec FROM history UNION ALL
SELECT thi FROM history UNION ALL
SELECT fou FROM history UNION ALL
SELECT fif FROM history UNION ALL
SELECT six FROM history
) t
ON s.id = t.val
GROUP BY
s.id;
请注意,这里我们将所有六列都放入一个逻辑列中,然后再使用stats
进行重叠检查。我们需要进行这种并集意味着,也许您的表设计实际上应该只包含一个逻辑列,而第二个列维护每个点的数据源。
答案 1 :(得分:0)
是的,只是一个想法,但是您可以使用UNION,但是也许有更好的解决方案
//Add items
MyListView.Focus(FocusState.Pointer);