数据表结构为:
id1,id2,id3,id4,...(其他一些字段)。
我想创建摘要查询以找出每列中使用某个 ID 值的次数。
数据
1,2,3,4,2008
2,3,5,1,2008
1,3,2,5,2007
1,2,3,6,2007
3,1,2,5,2007
对于值 1,结果应为
1,0,0,1,2008
2,1,0,0,2007
如何通过一个查询(在 MySQL 中)完成此操作。
使用特征或 delta 函数:
DECLARE @look_for AS int
SET @look_for = 1
SELECT SUM(CASE WHEN id1 = @look_for THEN 1 ELSE 0 END) AS id1_count
,SUM(CASE WHEN id2 = @look_for THEN 1 ELSE 0 END) AS id2_count
,SUM(CASE WHEN id3 = @look_for THEN 1 ELSE 0 END) AS id3_count
,SUM(CASE WHEN id4 = @look_for THEN 1 ELSE 0 END) AS id4_count
FROM tbl
有一些方法可以根据您的表和不同的 ID 值生成此代码(也是一种在 SQL Server 中使用 PIVOT 和 UNPIVOT 的技术,它不是 ANSI)。
这似乎是最好的解决方案(来自Wiki):
select years,
sum(1*(1-abs(sign(id1-56)))) as id1,
sum(1*(1-abs(sign(id2-56)))) as id2,
sum(1*(1-abs(sign(id3-56)))) as id3,
sum(1*(1-abs(sign(id4-56)))) as id4,
from mytable
group by years
选择
(从 t1 中选择 count(id1),其中 id1 = @param) 作为 id1,
(select count(id2) from t2 where id2 = @param) as id2
如果 X 是你正在寻找的 id 值,你会这样做。
select (select count(*) where id1 = X) as countid1 ... etc