【发布时间】:2016-03-05 23:26:20
【问题描述】:
现在我有一张这样的桌子。
表名:itemlist 项目 年份 value1 value2 value3 value4 value5 ... value99 -------------------------------------- 富1 12 32 48 富2 13 32 50 富3 14 32 50 富4 15 33 48 富5 16 33 48 富6 17 33 48 富7 13 38 42 富8 14 34 44 富9 15 36 46 富10 16 37 48这里是任务,我要找出对于每个值(如value1、value2等),有多少项在35以上,多少项在35以下。
有没有办法循环这个过程,所以我不必从每个值列中选择所有内容。
这是选择一列的示例。
SELECT count(value1) as v1_number
FROM itemlist
WHERE v1_number > 35
UNION
SELECT v1_number
FROM itemlist
WHERE v1_number <35;
这可行,但我必须输入 99 次。
所以我的解决方案是 PL/SQL 中的 for 循环。它看起来像这样:
BEGIN
FOR i in 1..99 LOOP
SELECT count(value || i) as v_number || i
FROM itemlist
WHERE v_number || i > 35
END LOOP
显然它不起作用,问题是我不知道如何将值与索引 1-99 连接。
【问题讨论】:
-
这是非规范化数据时遇到的问题。如果每个项目、年份和值都有一行,那么查询会很简单。
-
@eli,任何答案对您有帮助吗?你能评论或接受吗?