更新:不确定我尝试实现的目标是否可行,但感谢所有帮助 - 请求将其删除是否合适?我不希望贡献者失去我给予他们帮助的赞成。
更新:只是要清楚,当我说列创建动态'我的意思是没有开发者输入所以他们是未知的。它们仍然是标准数据库表中正确定义的列 - 我只是不知道所有这些列的名称。 :-D
我有一个动态创建列的表(很少但是我试图使其尽可能健壮)。我需要输出这些列的SUM,按最高顺序排序,但显然也需要第一行中的列名(否则数据无用)。我已经使用 information_schema.columns 方法将列检索到PHP中,并且我认为我会迭代执行SUM的列,但如果我这样做,则不会以数字方式对它们进行排序。
这可以内置到SP中(假设由于复杂性,它必须在SP中完成)。我相信我可能需要参与“PIVOT'某处,但这是我的知识极限!
总结一下(看看我在那里做了什么:-D)
我有一个包含这样的列的表定义:
volunteerID INT
yearAdded DATETIME
willySize111to120 INT
willySize121to130 INT
willySize131to140 INT
willySize141to150 INT
我想在查询中返回这样的数据集,我可以指定年份:
sizeBracket count
willySize111to120 98
willySize121to130 76
willySize131to140 54
willySize141to150 23
每当我想到我已经想出办法时,我就会碰到另一堵墙。
感谢您的帮助或指示!
鲍勃
答案 0 :(得分:1)
假设您的原始表格在每个志愿者的正确括号中都有1
,而在所有其他括号中都有0
:
SELECT bracket.sizeBracket, COUNT(*) count
FROM (
SELECT CASE
WHEN willySize111to120 THEN 'willySize111to120'
WHEN willySize121to130 THEN 'willySize121to130'
WHEN willySize131to140 THEN 'willySize131to140'
WHEN willySize141to150 THEN 'willySize141to150'
END CASE sizeBracket
FROM ... -- < Table Name
WHERE ... -- < Date Selection Logic
) bracket
GROUP BY sizeBracket
ORDER BY count DESC
<强>更新强>
基于带有列
的原始数据表willySize
volunteerID INT
yearAdded DATETIME
willySize INT
您可以运行以下查询
SELECT
CONCAT(
'willySize',
ROUND(willySize-6,-1)+1,
'to',
ROUND(willySize+4,-1)
) sizeBracket,
COUNT(*) count
FROM willySize
GROUP BY sizeBracket
ORDER BY count DESC