有三条数据,前三列数据一样,最后面的数据不一样。
问题:现在想让他返回一条数据:当最后一列数据含有 EVA或者 INT 时最后一列数据改为为”未完成“,
当最后一列数据均为 FIN 时最后一列数据为”完成“
理想的结果为:
16 CODE:YDKH-wb8-科长 wb8 未完成
17 CODE:YDKH-wb9-科长 wb9 未完成
select a.assm_task_id,a.assm_task_name,a.object_start,(case when count(*)=finTotal then '完成' else '未完成' end) eval_status from assm a,
(select assm_task_id,count(*) finTotal from assm where eval_status='FIN' group by assm_task_id) b where a.assm_task_id=b.assm_task_id group by assm_task_id,assm_task_name,object_start
亲测可以用的!
可以新建表么 可以建个
int 未完成
eva 未完成
fin 完成
表,然后联合一下查相关信息就行了
使用when。。then语句,对不同值进行划分
http://bbs.csdn.net/topics/320082222给你个实例
直接查询 做视图 就可以了 case when then
select if(eval_status='int or eval_status ='eva',"未完成","已完成") as staus from table
直接用case when 做伪列就可以得出结果
case when then else end
eg:
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
这是我写的,不知道对不对,你可以把你表的结构和数据贴出来,方便我这边检测正确性呀,你可以按照这种逻辑试试哈
SELECT assm_task_id,assm_task_name,object_starr,
CASE WHEN eval_stuts='FIN' THEN '完成' ELSE '未完成' END
FROM assm_task
GROUP BY assm_task_id
我想到两个方法你可以试试
#1 直接查询数据集合 遍历判断eval_status字段的 值 是EVA或者 INT 时最后一列数据改为为”未完成“ 当值为 FIN 时最后一列数据为”完成“
#2 建立一个新表
CREATE TABLE status(
key varchar(5) primarykey,
value varchar(5)
);
#添加三条数据
insert into status(key,value) values("INT","未完成");
insert into status(key,value) values("EVA","未完成");
insert into status(key,value) values("FIN","完成");
#然后查询时关联查询
#assm 代表你当前的表名
select a.assm_task_id ,a.assm_task_name,a.object_staff,s.value
from assm a,stauts s
where a.eavl_stauts=s.key;
case when eval_status = 'INT' then '未完成' case when eval_status = 'EVA' then '未完成' case when eval_status = 'FIN' then '完成'
select assm_task_id,assm_task_name,object_start,eval_status from(
select assm_task_id,
assm_task_name,
object_start,
case when eval_status = 'EVA' or eval_status = 'INT' THEN '未完成'
else '已完成' eval_status
from TABLE
) group by assm_task_id,assm_task_name,object_start,eval_status
测试了一下被采纳的SQL文,但运行时是报错的。“亲测可以用”不知使用的是什么sql工具执行的?
本人自己也尝试了一下解决方法,实例如下:
第一步,先建表:
CREATE TABLE ZM.T_ZM02 (
ASSM_TASK_ID VARCHAR2(2) NOT NULL,
ASSM_TASK_NAME VARCHAR2(30) NOT NULL,
OBJECT_START VARCHAR2(3) NOT NULL,
EVAL_STATUS VARCHAR2(3) NOT NULL,
CONSTRAINT T_ZM02 PRIMARY KEY(ASSM_TASK_ID, ASSM_TASK_NAME, OBJECT_START, EVAL_STATUS)
USING INDEX TABLESPACE USERS LOGGING PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT )
)
TABLESPACE USERS LOGGING PCTFREE 10 INITRANS 1 MAXTRANS 255
STORAGE(INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT ) MONITORING
/
第二步,插入测试数据:
delete from ZM.T_ZM02;
insert into ZM.T_ZM02(ASSM_TASK_ID, ASSM_TASK_NAME, OBJECT_START, EVAL_STATUS)values('16', 'CODE:YDKH-wb8-科长', 'wb8', 'EVA');
insert into ZM.T_ZM02(ASSM_TASK_ID, ASSM_TASK_NAME, OBJECT_START, EVAL_STATUS)values('16', 'CODE:YDKH-wb8-科长', 'wb8', 'FIN');
insert into ZM.T_ZM02(ASSM_TASK_ID, ASSM_TASK_NAME, OBJECT_START, EVAL_STATUS)values('16', 'CODE:YDKH-wb8-科长', 'wb8', 'INT');
insert into ZM.T_ZM02(ASSM_TASK_ID, ASSM_TASK_NAME, OBJECT_START, EVAL_STATUS)values('17', 'CODE:YDKH-wb9-科长', 'wb9', 'EVA');
insert into ZM.T_ZM02(ASSM_TASK_ID, ASSM_TASK_NAME, OBJECT_START, EVAL_STATUS)values('17', 'CODE:YDKH-wb9-科长', 'wb9', 'FIN');
insert into ZM.T_ZM02(ASSM_TASK_ID, ASSM_TASK_NAME, OBJECT_START, EVAL_STATUS)values('17', 'CODE:YDKH-wb9-科长', 'wb9', 'INT');
insert into ZM.T_ZM02(ASSM_TASK_ID, ASSM_TASK_NAME, OBJECT_START, EVAL_STATUS)values('18', 'CODE:YDKH-wb6-部门经理', 'wb6', 'EVA');
commit;
第三步,检查表中数据:
select ASSM_TASK_ID, ASSM_TASK_NAME, OBJECT_START, EVAL_STATUS
from ZM.T_ZM02;
16 CODE:YDKH-wb8-科长 wb8 EVA
16 CODE:YDKH-wb8-科长 wb8 FIN
16 CODE:YDKH-wb8-科长 wb8 INT
17 CODE:YDKH-wb9-科长 wb8 EVA
17 CODE:YDKH-wb9-科长 wb8 FIN
17 CODE:YDKH-wb9-科长 wb8 INT
18 CODE:YDKH-wb6-部门经理 wb6 EVA
第四步,执行SQL文:
SELECT DISTINCT A.ASSM_TASK_ID,
A.ASSM_TASK_NAME,
A.OBJECT_START,
(CASE WHEN A.FIN_TOTOL = B.FIN_TOTOL THEN '完成' ELSE '未完成' END) EVAL_STATUS
FROM
(
SELECT ASSM_TASK_ID, ASSM_TASK_NAME, OBJECT_START, COUNT(*) FIN_TOTOL
FROM ZM.T_ZM02
GROUP BY ASSM_TASK_ID, ASSM_TASK_NAME, OBJECT_START
) A,
(
SELECT ASSM_TASK_ID, ASSM_TASK_NAME, OBJECT_START, COUNT(*) FIN_TOTOL
FROM ZM.T_ZM02
WHERE EVAL_STATUS = 'FIN'
GROUP BY ASSM_TASK_ID, ASSM_TASK_NAME, OBJECT_START
) B
WHERE A.ASSM_TASK_ID = B.ASSM_TASK_ID
AND A.ASSM_TASK_NAME = B.ASSM_TASK_NAME
AND A.OBJECT_START = B.OBJECT_START
ORDER BY A.ASSM_TASK_ID,
A.ASSM_TASK_NAME,
A.OBJECT_START
第五步,执行结果:
16 CODE:YDKH-wb8-科长 wb8 未完成
17 CODE:YDKH-wb9-科长 wb9 未完成