2012-02-14 4 views
0

これはDB内のエラー数を合計するSQLクエリです。以下の問題は、これで利用可能なデータをチェックすると、与えられた実際のデータと正しいデータを取得します。何か間違っている(テーブルで利用できないデータです)任意の出力画面を投げる:Mysql - データの有無をDBで取得可能

SELECT 
    SUM(IF(ieb.errortype_id='1',1,0)) AS Total_Critical, 
    SUM(IF(ieb.errortype_id='2',1,0)) AS Total_Non_critical, 
    u.emp_id, 
    u.emp_name 
FROM 
    issueerror_empmap iem, 
    issueerror_body ieb, 
    USER u, 
    issueerror_type iet 
WHERE 
    ieb.chapter_id = '424262' AND 
    iem.chapter_errorid=ieb.chapter_errorid AND 
    iem.emp_id = u.emp_id AND 
    u.emp_id = '693' AND 
    ieb.errortype_id=iet.errortype_id 
GROUP BY 
    iem.emp_id, 
    u.emp_name 
ORDER BY 
    iem.emp_id 

いずれかをどのように利用できる場合は、データを取得するために、このクエリを構築し、入力データが入手できない場合は、テーブルにNULLとして出力を表示するために私を提案してくださいすることができます。上記のクエリの出力を生成するため

(表のデータが入手可能な場合)である。

Total_Critical Total_Non_Critical emp_id emp_name 
4     10     xxx  xxx 

上記のクエリのための出力を生成するため(表中のデータが利用できない場合)である。

Total_Critical Total_Non_Critical emp_id emp_name 

エラーカウントがゼロまたはゼロのemp_idおよびemp_nameが必要です。

+0

将来、可読性のためにクエリの書式を設定しようとする可能性がありますか?私は今度あなたのためにそれをしました。 –

答えて

0

このクエリはどうですか?

select 
sum (Total_Critical) as Total_Critical, 
sum(Total_Non_critical) as Total_Non_critical, 
emp_id, 
emp_name from 
(
(SELECT 
    SUM(IF(ieb.errortype_id='1',1,0)) AS Total_Critical, 
    SUM(IF(ieb.errortype_id='2',1,0)) AS Total_Non_critical, 
    u.emp_id, 
    u.emp_name 
FROM 
    issueerror_empmap iem, 
    issueerror_body ieb, 
    USER u, 
    issueerror_type iet 
WHERE 
    ieb.chapter_id = '424262' AND 
    iem.chapter_errorid=ieb.chapter_errorid AND 
    iem.emp_id = u.emp_id AND 
    u.emp_id = '693' AND 
    ieb.errortype_id=iet.errortype_id 
GROUP BY 
    iem.emp_id, 
    u.emp_name 
ORDER BY 
    iem.emp_id) 
) UNION ALL (
select 0,0,null, null 
) 
) as tbl1 
関連する問題