2017-03-08 69 views
1

如果子查询没有与EXISTS一起引入,则只能在选择list.error中指定一个表达式。不知道如何执行if exists语句。如果存在sql错误组合2选择语句

SELECT DISTINCT 
t1.id,t1.scn,t1.vsl_name,case when t1.id = t1.id THEN 'IMPORT' ELSE '0' END AS import_export, 
dbo.fn_format_datetime(t1.act_arr_dt_tm) AS act_arr_dt_tm, 
dbo.fn_format_datetime(t1.act_dept_dt_tm) AS act_dept_dt_tm, 
(  SELECT t1.scn, COUNT(t1.id) AS total_count_bl_status_c 
     FROM ccosbl t1 
     INNER JOIN vesvoy t2 ON t2.scn= t1.scn 
     WHERE t1.status_ind= 'C' 
     GROUP BY t1.scn) 
FROM vesvoy t1 
INNER JOIN ccosbl t2 ON t2.scn = t1.scn 
WHERE t2.status_ind = 'C' 
GROUP BY t1.scn,t1.vsl_name,t1.act_arr_dt_tm,t1.act_dept_dt_tm,t1.id 

我需要将两个select语句合并为一个。有没有其他的方法来在SQL中做到这一点?

+0

究竟是什么你想实现什么?一切的计数不需要子查询。 – ZLK

+0

嗨@hunt你是什么意思“结合两个选择语句”你的第一个查询和第二个在哪里? –

+0

@reds第一个是select distinct,第二个是括号中的select语句。 – hunt

回答

0

如果你坚持使用相关子查询,那么你需要确保只有一列被纳入选择:

SELECT DISTINCT 
t1.id,t1.scn,t1.vsl_name,case when t1.id = t1.id THEN 'IMPORT' ELSE '0' END AS import_export, 
dbo.fn_format_datetime(t1.act_arr_dt_tm) AS act_arr_dt_tm, 
dbo.fn_format_datetime(t1.act_dept_dt_tm) AS act_dept_dt_tm, 
(  SELECT COUNT(t4.id) AS total_count_bl_status_c 
     FROM ccosbl t4 
     INNER JOIN vesvoy t5 ON t4.scn= t5.scn 
     WHERE t1.status_ind= 'C' and t4.scn = t2.scn) 
FROM vesvoy t1 
INNER JOIN ccosbl t2 ON t2.scn = t1.scn 
WHERE t2.status_ind = 'C' 
GROUP BY t1.scn,t1.vsl_name,t1.act_arr_dt_tm,t1.act_dept_dt_tm,t1.id 

然而,更好的办法将是使用与加入一个子查询:

SELECT DISTINCT 
t1.id,t1.scn,t1.vsl_name,case when t1.id = t1.id THEN 'IMPORT' ELSE '0' END AS import_export, 
dbo.fn_format_datetime(t1.act_arr_dt_tm) AS act_arr_dt_tm, 
dbo.fn_format_datetime(t1.act_dept_dt_tm) AS act_dept_dt_tm, 
t3.total_count_bl_status_c 
FROM vesvoy t1 
INNER JOIN ccosbl t2 ON t2.scn = t1.scn 
LEFT JOIN 
(  SELECT t4.scn, COUNT(t4.id) AS total_count_bl_status_c 
     FROM ccosbl t4 
     INNER JOIN vesvoy t5 ON t4.scn= t5.scn 
     WHERE t4.status_ind= 'C' 
     GROUP BY t4.scn) t3 
ON t2.scn = t3.scn 
WHERE t2.status_ind = 'C' 
GROUP BY t1.scn,t1.vsl_name,t1.act_arr_dt_tm,t1.act_dept_dt_tm,t1.id 
0

试试这个:

SELECT t3.id t3.scn,total_count_bl_status_c,act_arr_dt_tm,act_dept_dt_tm,vsl_name,case when t3.id = t3.id THEN 'IMPORT' ELSE '0' END AS import_export, 
dbo.fn_format_datetime(t3.act_arr_dt_tm) AS act_arr_dt_tm, 
dbo.fn_format_datetime(t3.act_dept_dt_tm) AS act_dept_dt_tm from 
(SELECT t2.scn, COUNT(t2.id) AS total_count_bl_status_c 
     FROM ccosbl t1 
     INNER JOIN 
     vesvoy t2 
     ON t2.scn= t1.scn 
     WHERE t1.status_ind= 'C' 
     GROUP BY t1.scn)as t3 
inner join 

(SELECT * from ccosbl) as t4 on 
ON t4.scn = t3.scn 
+0

这只是一个猜测,我没有你的表格数据。如果你在这里显示更多的样本数据和预期的结果会更好。 –

+0

已经完成了sql语句,谢谢你的时间 – hunt