2017-03-08 12 views
1

EXISTSでサブクエリが導入されていない場合は、選択リストで1つの式しか指定できません。 if existsステートメントの実行方法がわかりません。存在する場合はSQLエラー2を選択します。select文

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文を1つとして組み合わせる必要があります。他にSQLでこれを行う方法はありますか?

+0

?すべての数にサブクエリは必要ありません。 – ZLK

+0

こんにちは@ハント何を意味するのですか "両方の選択ステートメントを組み合わせる"あなたの最初のクエリと2番目のものはどこですか? –

+0

@reds最初はselect distinctで、2番目はselectステートメントです。 – hunt

答えて

0

あなたが相関サブクエリを使用して主張なら、あなたは1列のみが選択に含まれていることを確認する必要があります。

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

関連する問題